#include <stdio.h>
struct bar
{
int data[10];
};
int main(void) {
printf("%d", ((struct bar*)0)+5);
return 0;
}
输出为 200。 我在一些 c 编程网站上看到了这个。谁能给我解释一下?
最佳答案
编辑:我正在根据评论部分进行更新。
我们理解对空指针 的算术运算是未定义的行为。您可以阅读更多 here .
当前代码没有专门使用NULL
。相反,它使用文字 0
,然后使用 ((struct bar*)0)
将其转换为 空指针。因此,在这段代码中,我们也有一个未定义的行为。如果不是 0
,我们有另一个文字(比如 1
),那么它是否产生一个值(201
在使用 的情况下) 1
) 或导致错误将取决于实现。
此输出 (200
) 来自此处:sizeof(struct bar)
为 40 字节并执行指针运算 (5 x 40 = 200
)。
关于c - (类型转换为常量文字)为什么 C 程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42916249/