gpt4 book ai didi

c - C中的这段代码如何工作?

转载 作者:太空宇宙 更新时间:2023-11-04 05:08:46 24 4
gpt4 key购买 nike

typedef struct {
char a[6];
} foo;

printf("%d", (foo*)0 + 7);

为什么打印出 42?这种语法是如何工作的,foo* 到底是什么?

最佳答案

这是编译程序的版本:

#include <stdio.h>

typedef struct {
char a[6];
} foo;


int main()
{
printf("%d", (foo*)0 + 7);
}

输出 if 42 因为 foo 结构的大小是 6。表达式 (foo*)0 + 7 (或其等效的 &(( foo*)0)[7]) 因此表示地址 42 (0 + 6 * 7)。

但实际上 printf("%d", (foo*)0 + 7); 是未定义的行为(即使在大多数情况下输出很可能是 42平台),因为要打印指针值(地址 指针值),您需要 %p 格式说明符并且需要转换为 void*(C 标准是这样说的)。

所以应该是:

printf("%p", (void*)((foo*)0 + 7));

但是它不会再打印 42 而是像 0000002a 这样的十六进制 42。

关于c - C中的这段代码如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43210567/

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