我读到了这个: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
!< / p>
代码
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
答案 0 :(得分:4)
在git config --global user.name yourname
git config --global user.email xxx@xx.com
参数列表中,最后两个参数为printf
和*walker
。这些都有类型*head
,当然它们是按价值传递的。没有struct Node
格式说明符可用于printf
,因此您将获得垃圾。
尝试打印结构中某个字段的值。例如,您可以传递struct Node
和walker->value
,并将格式说明符更改为head->value
以打印%d
值。