结构体的不同写法
这里只列举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个字节 。