文章目录
结构体的三种定义方式
1.类型和变量分开定义
struct /*类型名*/{
/*成员*/
};
struct /*类型名*/ /*变量名*/ ;
2.在定义结构体类型的同时定义变量
struct /*类型名*/{
/*成员*/
}/*变量名*/;
3.不定义类型名,直接定义结构体变量
struct {
/*成员*/
}/*变量名*/;
此法一次性,略显鸡肋
值得一提的是,对于结构体数组,在很多方面,其使用方法和结构体变量并无区别,只是在变量名后多了一个[ ],比如在定义结构体数组的时候,三种方法同上,在变量名后加上”[数组长度]”即可。
在定义结构体指针时,方法同上,在变量名前加“ * ”即可。
而在定义共用体的时候,三种方法同上,把关键字由struct改成union就行。
结构体变量
初始化
结构体类型名 结构体变量={初始值};
例
struct /*类型名*/={"字符串",数字,'单个字符'};
//只有在定义结构体变量时才可以使用该初始化格式
引用
1.用“ . ”对结构体的成员进行访问‘
/*结构体变量名*/./*该结构体内某个成员名*/
例 student.number
当要找的成员被嵌套在多个结构体里面时,可用多个“ . ”运算符一层一层地访问,直到找到该成员为止,比如:
//嵌套两个结构体记录人的生日
struct date{
int year;
int month;
int day;
};
struct people{
char name[10];
struct date birthday;
}people1;
//当要找某人的生日月份时,如下↓
people1.birthday.day ;
2.对结构体变量整体进行引用
- 只能对结构体变量的成员进行算术运算、比较运算,输入、输出等,不能对结构体变量整体进行此类操作(这点和数组十分相似)。
- 与数组不同的是,对于两个类型相同的结构体变量,可以整体赋值(这点用来对结构体数组进行排序十分方便)。
struct time list[100] = { 0 };
struct time temp;//交换结构体数组的中介
for (i = 0; i < number - 1; i++) { //按结束时间从小到大排序
for (j = 0; j < number - 1; j++) {
if (list[j].end > list[j + 1].end) {
temp=list[j];
list[j]=list[j+1];
list[j+1]=temp;
}
}
}
- 对结构体变量整体不能进行逻辑操作,但若要进行比较,可以逐个比较其中的某些成员。
关于结构体和函数、指针的关系,且听下回分解。