Anu*_*hke 0 c
#include <stdio.h> struct bar { int data[10]; }; int main(void) { printf("%d", ((struct bar*)0)+5); return 0; }
输出是200.我在一些c编程网站上看到了这个.有人可以解释一下吗?
小智 5
编辑:我正在根据评论部分进行更新.
我们知道对空指针的算术是未定义的行为.你可以在这里阅读更多.
目前的代码没有具体使用NULL.相反,它使用的文字0,然后将其铸造成空指针用((struct bar*)0).因此,在此代码中,我们也有一个未定义的行为.如果不是0,我们有另一个文字(比方说1),那么它是否产生一个值(201在使用的情况下1)或导致错误将是依赖于实现的.
NULL
0
((struct bar*)0)
1
201
此输出(200)来自此处:sizeof(struct bar)是40个字节,并执行指针运算(5 x 40 = 200).
200
sizeof(struct bar)
5 x 40 = 200
归档时间:
8 年,8 月 前
查看次数:
93 次
最近记录: