c++ - 指向数据结构成员的指针

标签 c++ pointers data-structures

我最近阅读了有关 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/

相关文章:

c++ - 在 C++ 中使用嵌入式 lua 从外部目录加载文件?

C 和指针符号

c - 为什么此 C 代码将局部结构视为指针,而它似乎不是指针?

python - 如何根据不同的索引对 python 列表进行排序?

java - Floyd Warshall算法实现

c++ - 错误 : declaration of ‘data’ as array of references

c++ - 计算列表中对象的出现次数

c++ - c++中列表的接口(interface)

c - 我如何通过指针将数组加载到函数并将它们用于该函数中的计算

sql - 关系数据 : entity inheritance approaches. 最佳实践