(Typecasting到Constant Literal)为什么这个C程序的输出

Anu*_*hke 0 c

#include <stdio.h>

struct bar
{
    int data[10];
};


int main(void) {
    printf("%d", ((struct bar*)0)+5);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是200.我在一些c编程网站上看到了这个.有人可以解释一下吗?

小智 5

编辑:我正在根据评论部分进行更新.

我们知道对空指针的算术是未定义的行为.你可以在这里阅读更多.

目前的代码没有具体使用NULL.相反,它使用的文字0,然后将其铸造成空指针((struct bar*)0).因此,在此代码中,我们也有一个未定义的行为.如果不是0,我们有另一个文字(比方说1),那么它是否产生一个值(201在使用的情况下1)或导致错误将是依赖于实现的.

此输出(200)来自此处:sizeof(struct bar)是40个字节,并执行指针运算(5 x 40 = 200).