持有相同Node结构地址的两个指针打印不同的值

时间:2018-01-01 01:49:28

标签: c pointers struct

我读到了这个:Two different values at the same memory address而且:How is a variable at the same address producing 2 different values?但两者都与const限定符有关,所以我认为我的问题不同。

这是来自链表实现。 headstruct Node*walker用于打印列表元素等...,也是struct Node*,初始化为struct Node* walker = head

奇怪的是,如果我使用*head格式打印%d(我的struct Node是经典int valuestruct Node* next格式),我会得到1,这是我设置第一个Node的值。 但是,当我使用相同的*walker格式打印%d时,我会得到一些奇怪的十进制值,例如1525189360

但我会检查headwalker是否保持相同的值,即第一个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

1 个答案:

答案 0 :(得分:4)

git config --global user.name yourname git config --global user.email xxx@xx.com 参数列表中,最后两个参数为printf*walker。这些都有类型*head,当然它们是按价值传递的。没有struct Node格式说明符可用于printf,因此您将获得垃圾。

尝试打印结构中某个字段的值。例如,您可以传递struct Nodewalker->value,并将格式说明符更改为head->value以打印%d值。