C语言,结构体问题?所占内在字节数,怎么算的???
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,结构体问题?所占内在字节数,怎么算的???相关的知识,希望对你有一定的参考价值。
struct dog
char ch[10];
int i;
int *p;
double k;
dog1;
非常感谢大家的回答,但是满意的答案只能选择一个,谢谢大家~~~~
结构体的长度等于体内各个成员变量长度之后。如此题长度为字符串数组的长度加上两个int型变量的长度,再加上double长度,最后结果为10+2+2+8=22。解析:char 每个字符占一个字节(因为是一个十长度的字符数组)所以是10字节,int占两个字节,double占8个字节。所以最后是10+2*2+8=22。
共用体的长度是体内成员中最长的长度。如果一个共用体内最长长度为12字节,则共用体的长度就是12。
希望能够帮到你。如果还有什么问题在问? 参考技术A 你的结构体当中,占字节数最大的变量是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 参考技术B
结构体所占内存大小为结构体各成员变量所占内存大小之和
本例共32字节
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 参考技术D 有个对齐问题,如果是4字节对齐的,32位系统
那么 ch[10] 占用前十个字节(0 - 9),
为了对齐,int i占用四字节(12 - 15)
int *p 占用4字节(16 - 19)
double k占用8字节 (24- 31)
因此,总共是32个字节
以上是关于C语言,结构体问题?所占内在字节数,怎么算的???的主要内容,如果未能解决你的问题,请参考以下文章