如果直接按照结构体内的成员类型相加,那么如上struct Student类型的大小应该是 10+4=14 似乎没什么问题,但是,当我们用以下代码做测试时,却发现出了问题 #include"stdio.h"#include"stdlib.h"structStudent{charname[10];//学生姓名intage;//学生年龄};intmain(){printf("%d\n",sizeof(structStudent));//测试...
1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。 2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数...
struct stru_test_int { int b; }; sizeof(struct stru_test_int) = 4struct stru_test_long { long c; }; sizeof(struct stru_test_long) = 8📊 当结构体中有多个相同类型的元素时: 如果结构体中有多个相同类型的元素,那么结构体所占的内存大小就是元素类型所占内存大小乘以元素个数。例如:c stru...
上面三者取最小的,就是实际对齐单位(这里的“实际对齐单位”是我为了方便区分随便取的概念) 2.除结构体的第一个成员外,其他所有的成员的地址相对于结构体地址(即它首个成员的地址)的偏移量必须为实际对齐单位或自身大小的整数倍(取两者中小的那个) 3.结构体的整体大小必须为实际对齐单位的整数倍。 上面三步即是...
计算嵌套结构体的大小 例如:计算下面结构体的大小 typedefstructTest3{shorta;struct{intb;doublec;longd;};inte;}Test2;intmain(){printf("size = %d\n",sizeof(Test3));return0;} 计算流程:起始地址位置为0,short类型占了2个字节,下面的一个成员类型为结构体,此时要与嵌套的结构体里最大的基本类型,也...
C语言中结构体计算大小的规则 简介 C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。你可以认为结构体是一种聚合类型。在实际开发中,我们可以将一组类型不同的、但是用来描述同一件事物的变量放到结构体中。例如,在校学生有姓名、...
struct stu{char ch1;int i;char ch2;}; 我们在前面运行过它的大小为12,而它的计算过程如下: 理解了这个结构体的大小是如何计算的,我们再来看看调整顺序后它为何又变成8了: 代码语言:javascript 复制 struct stu{char ch1;char ch2;int i;}; 理解了这两个结构体的内存大小是如何计算得出的,还有一种情况是...
Ⅴ,结构体的大小 基本数据类型都有相对固定的大小,而结构体是符合数据类型,它的成员的类型、数量都是不固定的,但我们可以通过sizeof运算符来获取结构体的大小,例如: printf("Size of the struct Person: %u bytes.\n",sizeof(struct Person)); Ⅵ,结构体的嵌套 C语言中可以将一个结构体作为另外一个结构体...
structt3 {chara;charb;doublec;shortintd;inte; }; = structt3 {chara;charb;charreserved1[6];doublec;shortintd;charreserved2[2];inte; }; 5. 总结 计算结构体所占空间大小时记住两个整数倍; 为了使结构体占用的空间最小,应该将结构体成员按照所占空间大小从小到大的顺序进行排列。
你的机器是64位按8字节对齐分配空间,因此struct S1是24,分析如下:struct S1 { char *a, *b; 8*2 int c; 8*2+4+补4 因为按8字节对齐,所以补齐为8的倍数 char d; 8*2+8+1+补7 同上,结果=24 };struct S2 { char a; 1 struct S1 b; 1+补7+24 先补齐...