gpt4 book ai didi

c - 结构体指针的引用

转载 作者:行者123 更新时间:2023-11-30 18:57:20 25 4
gpt4 key购买 nike

我试图弄清楚,指向结构的指针的含义是什么:

struct example{
int x;
}

struct example a = {20};
struct example *b = &a;

现在我的问题:

&a是结构体的地址

&b是指向结构体的指针的地址

b 将是引用结构体指针 b 的结构体的地址

现在:

(*b).x = 21;

(*b):如果这是引用指向结构体地址的指针,这就是 (*b) 之间的区别和b

我尝试打印出两个地址是否相同:

printf("%p, %p", *b, b);

答案是否定的!有人可以解释一下我哪里错了吗?

最佳答案

printf("%p, %p", *b, b); 中,参数 *b 是一个结构体。 C 标准未定义使用 %p 说明符打印结构的行为。无论你看到打印的什么值,实际上都是垃圾;没有任何意义。

当您以这种方式使用 printf 时,C 实现可能响应的方式包括,但不限于:

  • 结构体*b作为参数传递(通过将表示它的字节放置在为调用的第三个参数指定的寄存器或内存中),然后printf重新解释这些字节(其中包含 int),就好像它们是指针一样,并打印该指针的值。 printf 然后继续打印 b 参数。
  • 结构体*b按上面的方式传递,printf打印它,但是,因为参数(结构体)的大小与printf不同 需要(指针),下一个参数的位置计算不正确,因此 printf 使用了错误的字节,并且无法正确打印 b 参数.
  • 传递不正确的参数会导致堆栈损坏,并且程序崩溃。

另请注意,当使用 %p 说明符时,传递的任何指针都应转换为 void * (或 const void *)。为 %p 传递任何其他类型的指针也是未定义的行为。

关于c - 结构体指针的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com