C语言结构体与共用体
C语言中结构体是一种构造数据类型,用途是把不同类型的数据组合成一个整体。结构体类型定义描述结构的组织形式,不分配内存。结构体类型定义的作用域是全局的或局部的,视定义的位置而定。
结构体类型定义的基本形式为:
```c
struct [结构体名] {
类型标识符 成员名;
类型标识符 成员名;
…………….
};
```
其中,`struct`是关键字,不能省略。合法标识符可以省略,例如:
```c
struct {
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
} stu1, stu2;
```
这定义了一个无名结构体,并同时定义了两个结构体变量`stu1`和`stu2`。
结构体类型定义的作用是描述结构的组织形式,不分配内存。只有当定义结构体变量时,才会分配内存。例如:
```c
struct student {
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
struct student stu1, stu2;
```
这定义了一个名为`student`的结构体类型,并定义了两个结构体变量`stu1`和`stu2`。
结构体变量的定义可以同时定义结构体类型,例如:
```c
struct student {
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
} stu1, stu2;
```
这定义了一个名为`student`的结构体类型,并同时定义了两个结构体变量`stu1`和`stu2`。
结构体类型和结构体变量概念不同。结构体类型是描述结构的组织形式,不分配内存,而结构体变量是分配内存的实例。结构体类型不能赋值、存取、运算,而结构体变量可以。
结构体成员名与程序中变量名可以相同,不会混淆。结构体也可以嵌套,例如:
```c
struct date {
int month;
int day;
int year;
};
struct student {
int num;
struct date birthday;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
```
这定义了一个名为`student`的结构体类型,其中包含一个名为`birthday`的结构体成员,类型为`date`。
结构体类型及变量的作用域与生存期视定义的位置而定。如果在函数内部定义,作用域为局部的,否则作用域为全局的。