结构体
一、结构体类型与结构体变量的定义
使用结构体表示数据:
1.定义结构体类型
2.定义结构体类型的变量
3.引用结构体变量的各成员变量
相比简单的变量的定义,这一过程需要先自定义结构体类型。
注:
1.结构定义并不预留内存,它只是一个模板
2.结构定义放置在程序的开始部分,位于头文件声明之后。
3结构定义仅描述了一个结构的形式。如果要在程序里使用结构,需要声明结构变量。
定义结构之后,声明变量。
声明变量的形式:
①先定义结构,再声明结构变量:
struct student
{
int num;
char name[20];
float score;
};
struct student
student1,student2;
②在定义结构类型的同时声明结构变量:
struct student
{
int num;
char name[20];
float score;
};
student1,student2;
③直接声明结构变量:
struct
{
int num;
char name[20];
float score;
};
student1,student2;
嵌套结构及引用:
结构体类型的成员也可以是另一个结构体类型
二、结构体类型变量成员的引用
引用结构体类型变量成员的一般形式:
结构体类型变量名.成员名------如:stu1.num
注意:如果结构体成员本身是一个结构类型,则必须逐级找到最低级的成员才能使用。
如:stu1.birthday.month
1.结构体类型变量成员的引用
其中”.“是成员运算符,在所有运算符中优先级最高
2.结构体类型变量的赋值
①赋值是给它的成员赋值
②赋值方式由结构体类型变量成员的数据类型决定
③相同类型的结构体变量可以相互直接赋值。
三、结构体变量的初始化及实例
结构体变量的初始化:
赋值的顺序与成员声明的顺序一样;
允许初始化语句中的值的数目比结构成员数目少
四、结构体类型数组
结构体类型数组:元素为结构体类型的数组
1.结构体数组的定义形式:
①先定义结构,再定义变量
②定义结构的同时定义变量
③如果再定义结构的同时定义了数组,结构的名字可以省略
2.结构体数组的初始化:
实际上是对数组元素的最低层成员赋值。
结构体数组定义和初始化
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
int num;
char name[10];
char sex;
int age;
double score[5];
DATE birthday;
}STUDENT;
**3.结构体数组元素的引用**
int main()
{
STUDENT stud1[3];//定义结构体STUDENT类型数组stud1
int i,j;
for(j=0;j<3;j++)
{
scanf("%d",&stud1[j].num);
scanf("%s",stud1[j]name);
scanf(" %c",&stud1[j].sex);//%c前面的空格,用来读掉名字后面的换行符
scanf("%d",&stud1[j].age);
for(i=0;i<5;i++)
{
scanf("%lf",&stud1[j].score[i]);
}
scanf("%d %d %d",&stud1[j].birthday.year,&stud1[j].birthday.month,&stud1[j].birthday.day);
printf("%s \'s birthday:%d年%%d月%d日\n",stud1[j].name,stud1[j].birthday.year,stud1[j].birthday.month,stud1[j].birthday.day);
}
return 0;
}
五、结构体类型的指针变量
1.指向结构体变量的指针
①结构体类型指针变量的定义和使用:
如:stuct student *p1,boy;
p1=&boy; //✔
p1=&student;//❌,不能取结构体类型名的地址
②结构体类型指针变量访问结构体类型变量的各个成员
如:(*p1).num或p1->num
2.指向结构体类型数组的指针
①指针变量可以指向一个结构体类型的数组,这时指针变量的值是整个结构体类型数组的首地址。
②结构体类型指针变量也可以指向结构体类型数组的一个元素,这时指针变量的值是该数组元素的首地址。
3.结构体类型指针变量作函数参数
来源:CSDN
作者:猫猫敲给力
链接:https://blog.csdn.net/qq_45666654/article/details/104729431