结构体大小及内存对齐
#include<iostream>
using namespace std;

struct Box {
    double a;
    char b;
};
class TEST {
    Box b;
    char c;
};

int main()
{
    Box box;
    cout << sizeof(box) << endl; //16
	TEST st1;
	cout << sizeof(st1) << endl; //24
	return 0;
}

上面这个现象的出现就是由于采用了内存对齐,关于内存对齐,下面这篇文章比较好理解,大家速戳
内存对齐

关于好多课本上的一种常见写法

#include<iostream>
using namespace std;

typedef struct LNode {
	int data;
	struct LNode* next;
}*LinkList;

int main()
{
	LinkList link = new LNode;
	return 0;
}

这里的意思就是 typedef struct LNode * LinkList; 所以LinkList 和 LNode * 是一回事,二者等价

共用体

它能存储不同的数据类型,但只能同时存储其中的一种类型。由于每次只能存储一个值,所以必须有足够大的空间类存储最大的成员,所以共用体的长度为其最大成员的长度

union id {
    int a;
    double b;
};
sizeof(id) 8
枚举类型
#include<iostream>
using namespace std;


int main()
{
	//one,two,three被称为枚举量
	enum bit {one, two, three, four};
	bit mybit;
	//mybit = 1; //错误写法
	mybit = one;
	//不能将int直接赋给枚举类,需要进行转换
	mybit = bit(1);
	cout << mybit << endl;
	//mybit++;//错误写法
	int a = two + 3; //这里将two转化为int数据 1
	cout << a << endl;

	//下面这里错误是因为 one+two都被转化为int进行计算,结果为1,但是1是int,然后不能赋值给枚举类型
	//mybit = one + two;

	//枚举量的值可以进行设置,如果不设置,第一个枚举量默认为0,后面的比前面的大 1
	enum {red=1,blue=20,black=30};
	return 0;
}