struct SampleA { int a; int b; int c; }; struct SampleB { int a; struct Part1 { int b; }; struct Part2 { int c; }; };
结构体变量的引用引用结构体变量中成员的方式为:
结构体变量名.成员名
例如, student1.num 表示 student1 变量中 num 成员,我们可以对结构体变量的成员进行赋值: student1.num = 10010; 。
如果成员本身又属于一个结构体类型,则要用若干个成员运算符(点号 . ),一级一级地找到最低一级的成员,例如:
student1.birthday.month = 9;
另外对结构体变量的成员可以像普通变量一样进行各种运算,也可以用取址运算符 & 引用结构体变量成员的地址,或者引用结构体变量的地址。
结构体变量的初始化和其他类型变量一样,对结构体变量可以在定义时指定其初始值,用大括号括起来:
struct student { int num; char name[20]; char sex; int age; char addr[30]; } a = {10010, "Li Lei", 'M', 18, "Beijing Haidian"};
结构体与数组如果一个数组的元素为结构体类型,则称其为“结构体数组”。结构体数组与之前介绍的数值型数组的不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。
定义结构体数组
和定义结构体变量的方法类似,只需声明其为数组即可,例如:
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu[3];
以上定义了一个��组 stu ,数组有 3 个元素,均为 struct student 类型数据,如下图:
结构体数组的初始化
与其他类型的数组一样,对结构体数组可以初始化,例如:
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } stu[3] = {{10101, "Li Lin", 'M', 18, 87.5, "Beijing"}, {10102, "Amey", 'M', 17, 92, "Shanghai"}, {10103, "Bingo", 'F', 20, 100, "Fujian"}};
从上面可以看到,结构体数组的初始化的一般形式是在定义数组的后面加上“={初值表列};”。
结构体数组中各元素在内存中也是连续存放的,如下图:
结构体与指针一个结构体变量的指针就是该变量所占据的内存段的 起始地址 。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。
指向结构体变量的指针
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu1 = {...}; struct student * p; p = &stu1;
上述代码先声明了 struct student 结构体类型,然后定义一个 struct student 类型的变量 stu1 ,同时又定义了一个指针变量 p ,它指向一个 struct student 类型的数据,最后把结构体变量 stu1 的 起始地址 赋给指针变量 p ,如图所示: