结构体与共用体
结构体
是一个可以存储多个不同类型的变量的结构,类似于面对对象中的类(只有成员变量的类).
struct tag {
member-list
member-list
member-list
...
} variable-list ;
tag 是结构体标签。
member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。
variable-list 结构变量,定义在结构的末尾,最后一个分号之前,可以指定一个或多个结构变量
一般可以省略tag或variable-list
struct
{
int a;
char b;
double c;
} s1;
但是这样只能在声明结构时定义变量,之后就不能再定义变量了
struct SIMPLE
{
int a;
char b;
double c;
};
这样才是结构体的最一般的形式,之后再定义结构体变量用struct SIMPLE s2
这两个结构体虽然成员变量相同,但他们的变量不是相同的类型,是不能直接做赋值运算的
结构体和typedef
typedef是用来给数据类型重命名的,但是当和结构体共用时容易混淆
①直接连用
typedef struct simple{
int a;
int b;
};
struct simple s1;
这样没什么用
②取别名
typedef struct simple{
int a;
int b;
}Smp;
Smp s1;
这样重命名,就可以直接用第二个名字Smp定义变量,而不需加struct
③省略tag
typedef struct{
int a;
int b;
}Smp;
Smp s1;
④对已经声明完的结构体重命名
struct simple{
int a;
int b;
}s1;
typedef struct simple Smp;
⑤也可以定义结构体指针别名
typedef struct simple{
int a;
int b;
}*sp;
等价于:typedef struct simple *sp;
调用:
sp s1=malloc(sizeof(struct simple));
s1->a=0;
⑥同时定义结构体别名和结构体指针别名(常用,且经常省略tag)
typedef struct{
int a;
int b;
}simple,*Spoint;
Spoint s1=malloc(sizeof(simple));
s1->i=3;
这样就可以用simple定义结构体变量,同Spoint定义结构体变量指针
共用体
只是结构上和结构体相似,但共用体更接近于一个变量,这个变量的类型可以是多种的.但是它不能同时有多个类型
如:
union Data{
int i;
long f;
char c[20];
}
用Data定义的变量可以是int,long或char []型的,它的内存空间按最大的变量算
union的作用就是允许同一段内存空间存储不同的数据类型,这就是"共用"的实质
标签:typedef,struct,int,simple,补缺,共用,结构,温故,变量 From: https://www.cnblogs.com/Tenerome/p/Creview8.html