- 基本数据类型(Primitive Type)和复合数据类型(Compound Type)
- 结构体中成员变量的存储空间相邻
结构体之间允许直接赋值
栈帧:
C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。
栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。
从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等。组合使得系统可以任意复杂,而抽象使得系统的复杂性是可以控制的,任何改动都只局限在某一层,而不会波及整个系统。
- 枚举类型:
enum coordinate_type { RECTANGULAR, POLAR };
struct complex_struct
{
enum coordinate_type t;
double a, b;
};
- 关键字:enum
- enum coordinate_type是一个枚举类型(类似于结构体)、
- 枚举类型的变量只能从{ }中取值,值既可以以RECTANGULAR这种形式直接赋值(无需引号),也可以以int形式直接赋值;对于int形式,默认第一个为0,第二个为1,依次类推,不过也可以进行规定,但是递推规则一样,
enum coordinate_type { RECTANGULAR = 1, POLAR };
- 结构体的成员名和变量名不在同一命名空间,但枚举的成员名和变量名却在同一命名空间,所以会出现命名冲突。
int main(void)
{
enum coordinate_type { RECTANGULAR = 1, POLAR };
int RECTANGULAR; //这是不允许的
printf("%d %d\n", RECTANGULAR, POLAR);
return 0;
}
- 结构体的嵌套初始化:
struct Segment s = {{ 1.0, 2.0 }, { 4.0, 6.0 }};
或者struct Segment s = { 1.0, 2.0, 4.0, 6.0 };