gpt4 book ai didi

c - C 中明显的 NULL 指针取消引用实际上是指针算术吗?

转载 作者:太空狗 更新时间:2023-10-29 17:15:29 26 4
gpt4 key购买 nike

我有这段代码。它似乎在此处取消引用空指针,但随后将结果与 unsigned int 按位与运算。我真的不明白整个部分。它打算做什么?这是指针运算的一种形式吗?

struct hi  
{
long a;
int b;
long c;
};

int main()
{
struct hi ob={3,4,5};
struct hi *ptr=&ob;
int num= (unsigned int) & (((struct hi *)0)->b);

printf("%d",num);
printf("%d",*(int *)((char *)ptr + (unsigned int) & (((struct hi *)0)->b)));
}

我得到的输出是 44。但它是如何工作的?

最佳答案

它并不是真正取消对空指针的引用。您应该查看整个代码。代码说的是:取数0,把它当作struct hi *,在它指向的struct中选择元素b,取该元素的地址。此操作的结果将是元素 b 从结构开头的偏移量。当您将它添加到指针时,您会得到等于 4 的元素 b

关于c - C 中明显的 NULL 指针取消引用实际上是指针算术吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532797/

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