结构体基础(2)将会对结构体基础(1)补充结构体数组的用法。使用结构体数组可以更加方便的录入学生的信息。代码如下:
#include<stdio.h>
typedef struct Birthday {
int year;
int month;
int day;
}Birthday;
typedef struct Student {
int id;
const char* name;//在这里要注意在使用一些编译环境(如vs)时要自己定义"const",以便于后续的强制类型转换。
int age;
int score;
Birthday birthday;
} Student;
void printStudent(Student *pStu,int len)
{
for (int i = 0; i < len; i++) {
printf("学号:%d,\t姓名:%s,\t成绩:%d,\t生日:%d-%d-%d\n",
(pStu+i)->id, (pStu + i)->name, (pStu + i)->score,//注意当将变量的地址传入时要使用"->",而非"."。
(pStu + i)->birthday.year, (pStu + i)->birthday.month, (pStu + i)->birthday.day);
}
}
int main()
{
Student students[2]{
{ 001,"阿兔",78,100,{2005,6,18}},
{ 002,"毛熊",40,99,{2006,12,12}}
};
//Student stu1 = { 001,"阿兔",78,100,{2005,6,18}};
//Student stu2 = { 002,"毛熊",40,99,{2006,12,12}};
/*Student* pStu = &stu1;
printStudent(pStu);
pStu = &stu2;
printStudent(pStu);*/
printStudent(students, sizeof(students) / sizeof(students[0]));
return 0;
}
其中灰色注释部分为改进之前的语句。
在使用数组后在函数printfStudent中也可以进行如下更改:
void printStudent(Student *pStu,int len)
{
for (int i = 0; i < len; i++) {
printf("学号:%d,\t姓名:%s,\t成绩:%d,\t生日:%d-%d-%d\n",
pStu[i].id, pStu[i].name, pStu[i].score,//注意当将变量的地址传入时要使用"->",而非"."。
pStu[i].birthday.year, pStu[i].birthday.month, pStu[i].birthday.day);
}
}