1.结构体
- 结构体声明
例如描述一个学生:
struct stu
{
char name[20];
short age;
char sex[3];
};
特殊声明:
struct
{
int a;
int b;
int c;
char d[20];
}x;
struct
{
int a;
int b;
int c;
char d[20];
}a[10],*p;
注意:上面两个结构体省略了结构体标签,编译器会把上面两个声明当成两个完全不同的两个类型,因此p=&x是非法的
- 结构体自引用
struct Node
{
int data;//数据域
struct Node* next;//指针域
};
注意:
typedef struct
{
int data;
}Node;//这是结构体类型,不用开辟空间
struct
{
int data;
}Node;//这是结构体变量,需要开辟空间
- 结构体变量和初始化
struct point//类型声明
{
int x;
int y;
}p1;//声明类型的同时声明变量
struct point p2;//声明结构体变量p2
struct stu
{
char name[20];//名字
int age;//年龄
};
struct stu s = { "lisi", 20 };//初始化
struct Node
{
int data;
struct point p;
struct Node* next;
}n1 = { 10, { 1, 2 }, NULL };//结构体嵌套初始化
- 结构体内存对齐
首先,我们要了解为什么要进行内存对齐?
1、平台原因,并不是所有的硬件平台都能访问任意地址上的任意数据,在一些硬件平台上,只能在某些地址处取特定类型的数据,否则出现硬件异常
2、性能原因:数据结构&#