C温故补缺(八):结构体与共用体

2023-01-07,,,

结构体与共用

结构体

是一个可以存储多个不同类型的变量的结构,类似于面对对象中的类(只有成员变量的类).

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的作用就是允许同一段内存空间存储不同的数据类型,这就是"共用"的实质

C温故补缺(八):结构体与共用体的相关教程结束。

《C温故补缺(八):结构体与共用体.doc》

下载本文的Word格式文档,以方便收藏与打印。