C语言 保存相同节点结构地址的两个指针打印不同的值



我读到这个:同一内存地址上的两个不同值和这个:同一地址的变量如何产生 2 个不同的值? 但两者都是关于const限定符的问题,所以我认为我的问题不同。

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

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

但是,我检查headwalker具有相同的值,这是第一个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: %dn", &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,当然它们是按值传递的。 没有printf格式说明符可以适用于struct Node,所以你会得到垃圾。

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

最新更新