1.结构体不能包含函数。
2.结构体用“.”,结构体指针用“->”。
3.定义结构体变量的三种方式:
(1):先定义结构体类型再定义结构体变量。
(2):定义结构体类型的同时定义结构体变量。
(3):直接定义结构体变量,只有关键字struct,没有结构名,由于没有结构名,在此定义语句后面无法再定义这个类型的其他结构变量,除非把定义过程再写一遍。(不建议使用)
4.结构体有三种初始化方式:
struct peolpe
{
int age;
char name[];
float height;
};
(1): struct people xiaoming;
xiaoming.age=18;
strncpy(xiaoming.name,"xiaoming");
xiaoming.height=175.5;
(2): struct people xiaohong={18,"xiaohong",165.5};
(3): struct people xiaoli
{
.age=18;
.name="xiaoli";
.height=170.5;
};
5.结构体指针:跟普通指针一样,可以箭头"->"更方便;
struct people *p;
p=&xiaoming;
(*p).age=18;
或 p->age=18;
6.考虑到效率问题,一般不把结构体直接作为参数或者返回值,而是会传递结构体的地址(指针)。
7.计算结构体大小:按4字节对齐,两个坑放得下,绝不放三个坑。
struct people
{
int a;
double b;
char c;
}x; //大小为:4+8+4=16(字节);
8.共用体和结构体类似,结构体成员独立,而共用体成员不独立,它们共用内存。适合用来表达一些互斥的概念,比如一件衣服的颜色属性,要不就是红要不就是白,不可能既红又白。一个进程的状态,要不就是运行要不就是睡眠,不可能既运行又睡眠。
union people
{
int age;
char name[];
float height;
}x; //大小取最大的那个类型:4(字节)