一、对结构体的理解
结构体有点像数组,但与数组又有所不同。数组中只能存储同类型的元素,而结构体可以存储一组不同数据类型的元素。
结构体本质上还是一种数据类型。
二、结构体的声明(定义)
struct 是一个关键词,表示接下来是一个结构。
举例说明结构体声明的一般形式,如声明一个学生的结构:
struct student{ //声明结构体
char name[20]; //姓名
int num; //学号
}; //注意不要忘记分号
结构体的声明描述了一个包含若干成员的结构,相当于面向对象语言中的“类”还未创建一个实际的数据对象。
结构体声明可以放在函数外,相当于全局变量,在它之后声明的所有函数都可以使用;也可以放在函数内,类似于局部变量,只在该函数内有效,若与全局结构体重名,则会暂时屏蔽全局结构体。
三、结构体变量的定义
定义结构变量的一般形式:struct 结构体名 结构体变量名;
如:
struct student stu;
结构体变量的定义可以放在结构体的声明之后:
struct Stduent{ //声明结构体
char name[20];
int num;
};
struct Stduent stu; //定义结构体变量
结构体变量的定义也可以与结构体的声明 也可以同时进行:
struct Stduent{ //声明结构体
char name[20];
int num;
}stu; //在结构体的声明之后,加结构体变量名,不要忘记分号
结构体变量还可以通过使用匿名结构体来定义:
struct { //声明结构体,没有结构体名
char name[20];
int num;
}stu; //定义结构体变量
使用该方法后,不能再次定义新的结构体变量了。
四、访问结构成员
访问成员的一般形式:结构变量名.成员名
如果结构体中的某个成员也是一个结构体,则用:结构体变量名.成员中的结构体变量名.成员名 如:
struct Score{
float mathScore;
float EnglishScore;
};
struct Student{
char name[20];
int num;
struct Score score; //数据类型为结构体的成员
}stu;
stu.Score.mathScore; //访问成绩中的数学成绩
五、结构体变量的初始化
1.结构体变量的初始化可以放在定义之后进行
可以对结构体的成员逐个赋值:
struct Student stu; //定义结构体变量
stu.name = "Jack";
stu.num = 10
也可以对结构体的所有成员进行整体赋值:
stu = (struct Student){"Jack", 10};
//注意此时要进行强制类型转换,因为数组赋值也使用符号{},系统无法区分
2. 结构体变量的初始化也可以与定义同时进行
struct Student{ //声明结构体
char name[20];
int num;
}stu = {"Jack", 10}; //注意初始化值的类型和顺序要与结构体声明时成员的类型和顺序一致
//此时不需要强制类型转换
也可以部分初始化:
struct Student stu = {.name = "Jack"};
也可以按照任意的顺序初始化指定的成员
struct Student stu = {.score = 90,
.name = "Jack"};
3.可以用一个已经存在的结构体去初始化一个新的相同类型的结构体变量,是整体的拷贝。但只是内容赋值,不是地址赋值(内容一样,地址不同)。
待补充..