答:用户自己建立由不同类型数据组成的组合型的数据结构,它称之为结构体。(个人感觉和java的父类由那么一点像)
记住下面这个格式就行了,这个就是结构体的格式
struct 结构体名称 { //定义一个结构体
成员列表;
}; //这里有个冒号,也是需要的
定义完怎么用?
定义完后,这个结构体可以当作数据类型来使用(就和int,double,boolean一样的数据类型来使用)。
**注意:**用的时候是 (struct 结构体名称)连着一起用的,也就是说 (struct 结构体名称)这个是整体,要把这个整体当成数据类型。
在使用结构体定义一个变量之后,该变量可以访问结构体的成员。
如:
#include<stdio.h>
struct Student { //定义一个结构体
int num; //学生序号
int score; //成绩
float avg; //平均分
};
int main() {
//这个Tom现在就是一个结构体变量了,而且我可以通过这个变量访问结构体(包括其成员)
struct Student Tom;
Tom.num = 199; //Tom调用了结构体里的成员
printf("%d\n",Tom.num); //199
struct Student* p = &Tom; //定义一个结构体指针变量,并指向Tom的地址
p->num = 100; //指针p调用num,并改成100
printf("%d\n", p->num); //100
return 0;
}
访问成员规则:
结构体内的成员怎么赋值?
结构体内的成员变量是不能赋值的。
struct Student{
int a; //对的
int b = 100;//错的
}
结构体内的成员变量通过结构体变量给结构体里的成员变量赋值
#include<stdio.h>
struct Student { //定义一个结构体
int num; //学生序号
int score; //成绩
float avg; //平均分
};
int main() {
struct Student Tom = {1,2,3};//num = 1,score=2,avg=3;
return 0;
}
定义结构体的时候定义结构体变量(只能定义一次)
struct Student {
成员变量
}结构体变量;
//如下
struct Student {
int num; //学生序号
int score; //成绩
float avg; //平均分
}Tom;
定义结构体时,省略结构体名,直接定义结构体变量(也是只能定义一次,因为定义多次可能会乱)
Typedef 有什么用?
答:理解为给已知的(int、double之类的,然后结构体也可以)数据类型起一个外号。
Typedef 怎么用?
答: 语法如下:
typedef 已知数据类型 别名(即外号); //语法
//以下为案例
typedef int T; //现在int 和 T 是等价的了
int a = 100;
T b = 999; //这个相当于int b =999;
typedef 在结构体中的定义
注意:
语法如下:
typedef struct 结构体名称{
成员变量;
}别名;
//以下为案例:
typedef struct student { //结构体名称
int a;
int b;
}stu; //别名为stu
stu c; //用别名定义一个结构体变量,实际上就是struct student c;
c.a = 10; //调用结构体内的成员变量
printf("%d\n",c.a);//输出10;
语法:就是在结构体名称后面加个数组的定义
typedef struct student { //结构体名称
成员变量;
}stu;
stu 数组名[数组长度]; //这样定义结构体数组
例:
stu arr[10];//这里用的别名定义
struct student arr01[10]; //这里用结构体名称定义,都是可以的
定义结构体的同时定义结构体数组:
struct Student {
成员变量
}数组名[数组长度];
如:
struct Student {
成员变量
}arr[10];
结构体数组的初始化:
(和结构体变量一样)
例:
struct stu {
int a;
int b;
};
struct stu arr[3] = { {1,2},{3,4},{5,6} }; //初始化
for (int i = 0; i < 3; i++) {
printf("a=%d,b=%d \n", arr[i].a, arr[i].b);//输出
/*
a=1,b=2
a=3,b=4
a=5,b=6
*/
}