【C语言】结构体

结构体的不同写法

 这里只列举2种最常见的结构体写法

struct mystruct{
	int a;
	int b;
	char c;
	double d;
}; 

//声明:  struct  mystruct   myone;



struct mystruct2{
	int a;
	char c;
	int b;
	double d;
}struct_2 ;

//声明:  struct  struct_2  mytwo;




 如图可知:

        对于上面的结构体,是最最最普通的写法,声明也比较复杂,需要把前面的名字都打出来 :  struct mystruct   myone     代表了声明结构体,命名为myone

        对于下面的结构体,可以理解为重命名,   把  struct mystruct2   合并重命名简写为struct_2 , 这样就方便代码编写,也可以通过重命名更直接知道该结构体是做什么的。这是比较大部分的写法。

结构体的内存占用问题

        结构体的内存占用存在字节对齐!!!   (超级重要)

在我个人的理解是你创建好的结构体中,计算机会先对整个结构体扫描一遍,挑选出里面占用内存最大的变量,按照那个变量的占用内存大小进行每一行内存大小的设计排列。(可能说的比较难懂,看下面)

从前面具体的2个结构体中,可以看到里面变量最大的是double , 按照64位系统的计算机来看,占用的是8个字节。所以结构体中每一行只能开辟8个字节大小的空间,然后从上到下一个一个放,如果塞不下的话剩下的就要放到下一行 。

对于上面的结构体: 顺序是 int   int  char   double    分别占用  4   4   1   8  字节。

我们每一行可以存放8字节。按顺序就i是:

按照这样,上面的结构体总共占用的内存就是  24字节 。 

对于下面的结构体 ,虽然里面变量一样,但是排布方式不一样,占用的内存也可能不一样:

int  char   int   double    -->    4   1   4   8  

以上的排序比较巧合,都是占用了24字节。但是一些情况就不一样了。比如:

int  double     double   int   排布   和        int  int  double  double

前者就占用了32个字节,  后者占用了24个字节 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值