我读到了这个:Two different values at the same memory address这是:How is a variable at the same address producing 2 different values?但两者都与 const
的问题有关限定符,所以我认为我的问题是不同的。
这是来自链表实现。 head
是 struct Node*
,和walker
,用于打印列表元素等...,也是 struct Node*
并初始化为 struct Node* walker = head
.
奇怪的是,如果我打印出 *head
与 %d
格式(我的 struct Node
是经典的 int value
和 struct Node* next
格式),我得到 1
,这就是我设置的第一个Node
的值成为。
但是,当我打印出*walker
时使用相同的%d
格式,我得到一些奇怪的十进制值,例如 1525189360
.
但是我检查了 head
和walker
保持相同的值,即第一个Node
的地址,所以我真的不明白这种差异。
更奇怪的是,如果我打印出 head->value
,我得到1
再次,如果我打印出 walker->value
,我还得到1
这次!
代码
struct Node {
int value;
struct Node* next;
};
struct Node n1;
n1.value = 1;
struct Node* head;
head = &n1;
struct Node* walker = head;
printf("address of walker: %p, address of head: %p, value in walker: %p \
,value in head: %p, value pointed to by walker: %d, value pointed \
to by head: %d\n", &walker, &head, walker, head, *walker, *head);
打印输出:
address of walker: 0x7fff5ae88aa8, address of head: 0x7fff5ae88b00, \
value in walker: 0x7fff5ae88af0, value in head: 0x7fff5ae88af0, \
value pointed to by walker: 1525189360, value pointed to by head: 1
最佳答案
在 printf
参数列表中,最后两个参数是 *walker
和 *head
。它们都有struct Node
类型,当然它们都是按值传递的。没有可在 struct Node
上使用的 printf
格式说明符,因此您会得到垃圾。
尝试打印该结构的字段之一的值。例如,您可以传递 walker->value
和 head->value
,并将格式说明符更改为 %d
以打印 int
值。
关于c - 持有相同 Node 结构地址的两个指针打印不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48046704/