C语言,结构体问题?所占内在字节数,怎么算的???

struct dog
{
char ch[10];
int i;
int *p;
double k;
}dog1;
非常感谢大家的回答,但是满意的答案只能选择一个,谢谢大家~~~~

在c语言中如何计算结构体长度和共用体长度?
结构体的长度等于体内各个成员变量长度之后。如此题长度为字符串数组的长度加上两个int型变量的长度,再加上double长度,最后结果为10+2+2+8=22。解析:char 每个字符占一个字节(因为是一个十长度的字符数组)所以是10字节,int占两个字节,double占8个字节。所以最后是10+2*2+8=22。
共用体的长度是体内成员中最长的长度。如果一个共用体内最长长度为12字节,则共用体的长度就是12。
希望能够帮到你。如果还有什么问题在问?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-15
你的结构体当中,占字节数最大的变量是double类型,是8个字节,所以这个结构体的大小是以8字节来对齐的,也就是它的大小是8的整数倍。再来看成员变量的大小:ch[10]占了10个字节,再加上变量i的大小就是14字节,但是再加上指针变量p的大小(4个字节)的时候,成了18,它不是8的倍数(也就是没有字节对齐),所以ch[10]和变量i一共占16个字节,然后指针p占8个字节(p本身只占4个字节,但是加上后面的k的话一共是12个字节,没有字节对齐,所以单独为它分配了8个字节的空间),k也占了8个字节,所以它的大小应该是16+8+8=32
第2个回答  2012-04-15

结构体所占内存大小为结构体各成员变量所占内存大小之和 

本例共32字节

第3个回答  推荐于2017-09-04
对于stuct的大小计算:
1、先算struct的对齐大小,对齐的大小也是取决于struct成员中字节对齐最大的那个;在给的题目中就是int类型,也就是4byte。如果结构体成员小于4byte,需要补齐填满4byte
2、第一个char类型虽然只有1byte,但是为了4byte对齐,也需要填充为4byte。所以总的大小就是4+4+100 = 108
扩展一下,如果结构体为
struct student
{
char sex;
char a;
char b;
int age;
char name[100];
};
结果是108
第4个回答  2012-04-15
有个对齐问题,如果是4字节对齐的,32位系统
那么 ch[10] 占用前十个字节(0 - 9),
为了对齐,int i占用四字节(12 - 15)
int *p 占用4字节(16 - 19)
double k占用8字节 (24- 31)
因此,总共是32个字节

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网