c - (类型转换为常量文字)为什么 C 程序的输出

标签 c

#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/

相关文章:

c++ - 为什么派生类没有vtable指针而是使用基类的vtable?

c++ - 发送没有文件描述符的文件

C语言 : string concatenation on string pointer

c - 为什么 CTRL-D 没有用这个程序发出 EOF 信号?

c - 是否可以在 C 中编写符合要求的 malloc 实现?

c - 为什么这个C程序的输出为零?

C 指向函数指针的外部指针

c - C中 "int const* "的确切含义是什么?

c - 将 C union 翻译成 Pascal 变体记录

android - 如何在 Android 中使用 OpenSL ES 或其他 C/C++ 代码更改音频的音高而不更改其持续时间?