我最近阅读了有关 pointers to data structures 的 C++ 教程的一部分,其结构定义为:
struct movies_t {
string title;
int year;
};
movies_t * pmovie;
它提到了 (*pmovie).title
与 *(pmovie.title)
的不同之处。有人可以解释为什么吗?
最佳答案
您不能只是互换语法,因为两者的含义不同。
第一种情况,(*pmovie).title
表示 pmovie 是一个指针,您正在取消引用它,然后从该对象中提取“title”字段。等效/更简单的语法是 pmovie->title。
你的第二个案例说,“Pmovie 是一个对象,而 title 是指向某物的指针。我想取消引用该指针。”
例如:
struct Movie {
std::string title;
};
Movie movie;
Movie * pmovie = &movie; // here pmovie is a pointer to a movie
pmovie->title = "Trading Places";
(*pmovie).title = "Trading Places"; // same meaning as line above
对比
struct Movie {
std::string * title;
};
std::string title;
Movie pmovie; // here "pmovie" is an insanely named variable for a non-ptr
pmovie.title = &title;
*(pmovie.title) = "V For Vendetta"; // Note, pmovie not a ptr, title is
显然,第二种情况很荒谬,而且确实是一个糟糕的接口(interface)(你不希望在你的对象接口(interface)中使用原始指针,无论对象是内部还是外部拥有的。)我只举了一些例子来说明区别是什么。希望您只遇到第一种情况下的代码。
关于c++ - 指向数据结构成员的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49244626/