结构体 联合体

结构体类型
1 一种构造数据类型,由若干“成员”组成。
格式:

struct 结构体类型名{
    数据类型1 成员1;
    数据类型2 成员2;
    ······
    数据类型n 成员n;
};

可嵌套定义,一个结构体内部成员的数据类型可以是另一个已经定义过的结构体类型。
(1)结构体成员名可以与程序中其他定位基本类型的变量名同名,同一个程序中不同结构体的成员名也可以相同,代表不同的对象。
(2)如果结构体类型的定义在函数内部,则这个类型名的作用域仅为该函数;如果定义在所有函数的外部,则可在整个程序中使用。

定义结构体时系统并不为其分配存储空间。结构体类型定义好后,可以像C中提供的基本数据类型一样使用,即可以用它来定义变量、数组等,称为结构体变量或结构体数组系统会为变量或数组分配相应的存储空间。

定义结构体类型变量的方法,3种:
(1)先定义结构体类型,后定义变量
当一个程序中多个函数内部需要定义同一结构体类型的变量时采用,而且应将结构体类型定义为全局类型
(2)定义结构体类型的同时定义变量

struct 结构体标识符{
    数据类型1    成员名1;
    数据类型2    成员名2;
    ......
    数据类型n    成员名n;
}变量1,变量2,......,变量n;

适用于定义局部使用的结构体类型或结构体类型变量,例如在一个文件内部或函数内部
(3)直接定义结构体类型变量
不指出具体的结构体类型名,直接定义结构体成员和结构体类型的变量。

struct    {
    数据类型1    成员名1;
    数据类型2    成员名2;
    ......
    数据类型n    成员名n;
}变量1,变量2,......,变量n;

实质是先定义一个匿名结构体,之后再定义相应的变量。

初始化结构体变量

struct 结构体标识符{
    数据类型1    成员名1;
    数据类型2    成员名2;
    ......
    数据类型n    成员名n;
}struct 结构体标识符 变量名 = {初始化值1,初始化值2,......,初始化值n};

结构体变量的引用

结构体变量名.成员名

结构体成员变量和普通变量一样使用

对结构体变量本身的引用
同类型的结构体变量之间可以进行赋值运算
不允许将一个结构体变量作为整体进行输入或输出操作
(1)用sizeof运算符计算结构体变量所占内存空间
sizeof(结构体变量名) 或 sizeof(结构体类型名)
(2)用&运算符对结构体变量进行取址运算

2 结构体数组
定义,3种方式:

(1) 先定义结构体类型,再定义结构体数组

struct 结构体标识符{
    数据类型1    成员1;
    数据类型2    成员2;
    ......
    数据类型n    成员n;
};
struct 结构体标识符 数组名[数组长度];

(2) 定义结构体类型的同时,定义结构体数组

struct 结构体标识符{
    数据类型1    成员1;
    数据类型2    成员2;
    ......
    数据类型n    成员n;
}数组名[数组长度];

(3) 不给出结构体类型名,直接定义结构体数组

struct {
    数据类型1    成员1;
    数据类型2    成员2;
    ......
    数据类型n    成员n;
}数组名[数组长度];

初始化结构体数组
定义数组的同时,对其中的每一个元素进行初始化。

3 结构体指针
struct 结构体名 *指针变量名;

struct  {
    int a;
    char b;
}m,*p;
p=&m;

使用指针p访问m中成员的方式:

(1)用运算符"." m.a、m.b
(2)用"."运算符,通过指针变量访问目标变量 (p).a、(p).b。(运算符"."高于"*")
(3)使用"->"运算符,通过指针变量访问目标变量,p->a、p->b

指向结构体数组的指针
结构体指针变量的地址值的增量大小是"sizeof(结构体类型)"的字节数

4 结构体与函数

结构体作为函数参数
(1)在函数之间直接传递结构体类型的数据

(2)

猜你喜欢

转载自www.cnblogs.com/OceanF/p/10122721.html