在c语言的自定义类型中,主要就是结构体,联合,位段,枚举这几种。今天就让我们详细讲述一下他们各自的特点。
在这几种自定义类型中,应用最广泛的我觉得就是结构体了吧。
比如我们定义一个结构体。
struct A{
char job[20];
int age;
char *p;
float c;
}a,*p;
struct 是结构体的类型,A 是结构体的名称,而其中的 char job[20]; int age; float height;等都是结构体的成员,最后的a *p 都是 定义出来的结构体变量。
在结构体定义创造的过程中,结构体的名称的存在保证了你可以以 struct A a;的形式在函数内定义结构体局部变量,如果把A 省去,则只能在结构体定义的最后像a这样定义全局变量,结构体变量可以省略吗?当然可以。结构体内可以没有结构体成员吗?不可以,定义要求结构体内部至少有一个结构体变量。
那什么时候可以省略结构体名称还可以在函数内部定义结构体变量?
typedef struct A{
int i;
char pc[0];
}s;
通过typedef 定义过的类型可以直接在函数内部 s arr[ 3 ];的形式 结构体变量。
在这里我们注意,我们不可以在结构体内套一个结构体,很容易理解,这样在开辟空间的时候会崩溃,一个结构体,套一个结构体,这个结构体大小无法计算。所