请问一个结构体长度有关问题
请教一个结构体长度问题有个结构体struct sdshdr {long lenlong freechar buf[0]}我输出sizeof(long)
请教一个结构体长度问题
有个结构体
struct sdshdr {
long len;
long free;
char buf[0];
};
我输出sizeof(long)为4,输出sizeof(struct sdshdr)为什么是8呢?
不是long+long+char等于4+4+4=12吗?
[解决办法]
结构体有对齐的问题,参考http://blog.csdn.net/shenbin1430/article/details/4292463
[解决办法]char buf[0] 不就是0吗 , 4+4 不等于8吗
[解决办法]char 是 0 个, 不计算空间了,这种结构通常都是变长的, sizeof 的大小不一定是使用时候的大小。
[解决办法]推荐一下这篇博客,相当不错:http://blog.csdn.net/21aspnet/article/details/6729724
看完之后我可以保证你不会疑惑字节对齐了。
[解决办法]有意义,它表示了这个结构体是变长的,而且实际使用的时候也是可以取这个成员的。 搜索: C 变长结构体
[解决办法]
char buf[0] 不就是0吗 , 4+4 不等于8吗
Ding.....
如果char buf[0]是0,那么它怎么指向申请的内存空间呢?求解。。
你把数组和指针的概念搞混淆了,这里数组的长度是0, 你sizeof(asdshdr.buf)时返回的也是0,表示的是数组的长度,当用buf指向申请的内存空间是,是把数组名退化成指针来使用,他指向的是紧随asdsdr之后的那块内存,这个指针不存在于asdsdr中,可以把它当陈一个临时变量。
[解决办法]buf成员对程序没有什么意义,它只是起到填补空间以达到字节对齐的目的,当然即使不加这个成员通常编译器也会给我们自动填补对齐,我们自己加上它只是起到显式的提醒作用.因为long long各占4字节,不存在字节对齐的问题,所以char buf[0]不占用空间