1. 我的空结构体怎么大小为 0
int main(int argc,char* aggv[]){
struct NoMember2
{
// char mB;
// int mA[0];
};
printf("sizeof(NoMember2)=%ld\n",sizeof( struct NoMember2));
return 0;
}
输出: 0;
2. 空数组输出也为 0;
int main(int argc,char* aggv[]){
struct NoMember2
{
// char mB;
int mA[0];
};
printf("sizeof(NoMember2)=%ld\n",sizeof( struct NoMember2));
return 0;
}
输出 0;
3 . 实例的空结构体 也为 0;
int main(int argc,char* aggv[]){
struct NoMember2
{
// char mB;
// int mA[0];
};
struct NoMember2 nomeber2;
printf("sizeof(NoMember2)=%ld\n",sizeof(nomeber2));
4. 结构体内字节对齐也变了
int main(int argc,char* aggv[]){
struct NoMember2
{
char mB;
int mA[0];
};
printf("sizeof(NoMember2)=%ld\n",sizeof( struct NoMember2));
return 0;
}
输出:4
int main(int argc,char* aggv[]){
struct NoMember2
{
char mB;
};
printf("sizeof(NoMember2)=%ld\n",sizeof( struct NoMember2));
return 0;
}
输出:1
为什么 没有占位?
空结构体的一种用法,假如 a.h a.c 有一个结构体 struct test;,a.c a.h 编译成库,但是里面还有其他不想暴露出去的。
就可以新建一个b.h 头文件,但是不用写实现,用时带上a.c a.h的库就行了。
简单来说就是一个源文件,多个头文件,一个开发使用(内部),一个对外开放接口(留的接口);