空结构体大小到底是多少

Padding 发布于 2013/01/08 13:09
阅读 1K+
收藏 1
#include <stdio.h>
typedef struct name{
       //char a;
       //int b[];
       //char *c;
       //char b[];
              
}xiaoniu;
int main(void){
    printf("%d\n",sizeof(xiaoniu));
 
    getchar();
    return 0;
}

上面程序输出结果为1,求甚解!!

以下是问题补充:

@Padding:继续该问题,如果定义结构体struct name{ char b[]; }; 大家才大小是多少?是0 (2013/01/08 22:34)
加载中
1
skjda
skjda
C++中对于空的类会自动赋一个字节的,这是为了怕出现一个空类的情况而做的工作,不过各个厂商编译情况不同,不过大部分都是这样的, 详情请看《深度探索C++对象模型》。
1
宏哥
宏哥

有点像哲学问题, 如果一个东西, 没有大小, 那么它的位置在哪里?

所以, 它必须有大小?!

0
L5_Railgun
L5_Railgun

怎么可能

最近OSC老是遇到穿越的人,你用的什么编译器?

不过你如果建立的 *.cxx文件,以c++编译,结果应该是1.原因不知道,不懂c++。

如果是C,那是不可能的

0
L5_Railgun
L5_Railgun
补充一下,可能,我只是猜测,是C++规范里不允许存在大小为0的type。
小郭一号
小郭一号
C++里到处是这种S B规范
0
小魔
小魔
不管 是结构体还是类,c++为了区分每个结构体和类,编译器都会为类和结构体多加一个标示符,以区分。通常是一个char字符
0
a
autocoder

用的时候 sizeof一下即可. 不要假定他是一个固定的值. 不同编译器他的值可能是不一样的.

不要认为自己试了几个编译器就认为他是固定的某值.

0
L5_Railgun
L5_Railgun

引用来自“小魔”的答案

不管 是结构体还是类,c++为了区分每个结构体和类,编译器都会为类和结构体多加一个标示符,以区分。通常是一个char字符
type struct _X{
    int dummy;
}X;


难道会跑出sizeof(X) = 5这种结果 ? 
0
小魔
小魔

引用来自“艾米”的答案

引用来自“小魔”的答案

不管 是结构体还是类,c++为了区分每个结构体和类,编译器都会为类和结构体多加一个标示符,以区分。通常是一个char字符
type struct _X{
    int dummy;
}X;


难道会跑出sizeof(X) = 5这种结果 ? 
人家问题是说空结构体
0
小耶果
小耶果
因为空结构需要实例化必须要存储内存地址,故编译器插了一个char在里面以支持 xiaoniu _x; 这种做法.当然具体编辑器可能有不同做法.
0
缪斯的情人
缪斯的情人
根据空即是铯,可得出空==铯,铯在元素周期表排34位,所以空 == 34。
返回顶部
顶部