2 hkmyht Hkmyht 于 2016.02.26 14:09 提问

struct sizeof 的问题

一:typedef struct S1
{
}S1;
这肯定编译过不了!

二:typedef struct S2
{
int b;
int c;
}S2;

在main 输出 sizeof(S2) 输出结果是8

三:typedef struct S3
{
int b;
int c;
char * p;
}S3;

sizeof(S3) **输出 12 **

四:typedef struct S4
{
int b;
int c;
char s[0];
}S4;
这时候 sizeof(S4)为什么是8? 而不是12;

图片说明

2个回答

John_ToStr
John_ToStr   Rxr 2016.02.26 16:30
已采纳

http://blog.csdn.net/maopig/article/details/7243646
data是一个数组名;该数组没有元素;该数组的真实地址紧随结构体Info之后;这种声明方法可以巧妙的实现C语言里的数组扩展。

Hkmyht
Hkmyht 谢谢了。这问题昨天已经和朋友讨论了。的确是你说的这样。但是当时我还不知道扩展的用法。。现在学习了。哈哈
接近 2 年之前 回复
Hkmyht
Hkmyht 谢谢了。这问题昨天已经和朋友讨论了。的确是你说的这样。但是当时我还不知道扩展的用法。。现在学习了。哈哈
接近 2 年之前 回复
Hkmyht
Hkmyht   2016.02.26 14:36

补三张图;图片说明
图片说明
图片说明

内存跟踪的结果
其中19行和21行
19:strcpy(pchangeable2->pc, "fgg");
21:pchangeable2[1].pc[1] = 55;
修改的应该是是 pchangeable2的首地址 怎么会是pchangeable2+1的地址? 21同样

比如:char * str = (char *) malloc(sizeof(char) * 20);
*str = 'b';
str[1] = 'c';
修改肯定是下标0 和下标1
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!