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

标签 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这次!

代码

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->valuehead->value,并将格式说明符更改为 %d 以打印 int 值。

关于c - 持有相同 Node 结构地址的两个指针打印不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48046704/

相关文章:

c - 语句 if (counter & (1<<j)) 是什么意思,它是如何工作的?

c++ - 路径设置方法

c - 为什么我可以使用 char 指针而不使用 malloc?

c++ - 如何引用结构变量并使用或不使用指针进行初始化

android - 如何在android中获取指针/光标位置

c - 在 c 中的结构数组中获取空​​值,释放不当

c - 在 glibc memmove 中强制转换为 signed int 的目的是什么?

c - 阶乘的时间复杂度

c - union 内存分配::存储比分配内存更多的内容

c++ - 动态实例化和初始化结构