【发布时间】:2017-05-12 15:11:44
【问题描述】:
#include<iostream>
using namespace std;
int main()
{
struct node
{
int data;
struct node *next;
};
struct node *node1;
struct node node2;
node2.data = 200;
node2.next = NULL;
cout<<"address of node2: "<<&node2<<endl;
cout<<"address of node2.data: "<<&node2.data<<endl;
cout<<"address of node2.next: "<<&node2.next<<endl;
cout<<"value of node2 data: "<<node2.data<<endl;
cout<<"value of node2 next is: "<<node2.next<<endl;
node1 = (struct node*)malloc(sizeof(node));
node1->data = 100;
node1->next = NULL;
cout<<"value of node1 data: "<<node1->data<<endl;
cout<<"value of node1 next: "<<node1->next<<endl;
cout<<"address of node1 variable is: "<<&node1<<endl;
cout<<"address of node1 data variable is: "<<&node1->data<<endl;
cout<<"address of node1 next variable is: "<<&node1->next<<endl;
cout<<"value stored at node1 variable is: "<<node1<<endl;
}
我想使用指向该结构的指针打印结构变量成员的地址。从上面的代码示例中可以看出,我使用了 &node1->next 和 &node1->data 来打印地址。它似乎打印了正确的地址,因为我可以通过取消引用 &node1->next 和 &node1->data 返回的地址来访问这些值。 *(&node1->next) 和 *(&node1->data) 正确返回值。
但我不明白符号“&node1-> data”和“&node1->next”如何返回结构变量成员的地址。我偶然发现 &node1->data 和 &node1->next 打印了地址。而使用 &node2.data 和 &node2.next 等其他符号时,我能够在逻辑上提出这些符号来打印地址,但是在使用指向结构的指针来打印地址时,我意外地发现了它们,而不是能够在逻辑上来加上正确的符号。
我想知道我想出的是否是打印成员变量地址的正确用法,如果是,它是如何正确表示的?
【问题讨论】:
-
@tobi303 问题是如何使用指向该结构的指针打印结构变量成员的地址?你会使用 &pointer_var->data_member 吗?如果是的话,这实际上是如何返回数据的?在使用它访问地址的上下文中可视化这个符号是令人困惑的
-
你为什么在 C++ 中使用
malloc? -
我想我已经找到了答案,但我仍然想听听有经验的 C/C++ 开发人员的意见。我们使用符号 (*node1).next 或 node1->next 来访问(或打印)结构中下一个变量的值。为了打印地址,我们只需将 & 符号附加到 &(node1->next) 或 &((*node1).next)。使用括号更容易理解。
-
@tobi303 非常感谢!这是一个正确的解释。我犯的错误是我试图通过将其与指向整数变量的普通指针进行比较来理解指向 struct 的指针。如果我们有一个指向整数变量的指针,那么要打印该整数变量地址,我们只需打印指针中的值 (cout
-
其实,这不是一个很好的解释。我将删除 cmets 并让您参考同时给出的答案