咱么章节不是教学结构体是让咱们新手玩家看一下结构体是啥样的以至于可以看懂后面的章节具体细节请看第二章 结构体(struct) 有基础的小伙伴可以快速过一遍
"struct"结构体可以让C语言创建新的类型
老习惯,用例子说明:创建一个学生
struct stu{
char name[20];
int age; //内部的变量称为成员变量
double score;
};//在1-5行代码中咱们就建好了一个学生的结构体。
int main(){
struct stu s = {"张三",20,88.5}; //结构体的创建和初始化,s是结构体变量 struct stu是该结构体类型
printf("%s %d %lf\n",s.name,s.gae,s.score);
//结构体成员变量的调用:结构体变量.成员变量
return 0;
}
结合指针的结构体
在上节中咱们讲到了指针,那咱们这节可以创建一个指针来指向结构体。在看不才创建前小伙伴们也可以试着自己思考来创建。
咱们用上面的例子来创建
struct stu{
char name[20];
int age; //内部的变量称为成员变量
double score;
};//在1-5行代码中咱们就建好了一个学生的结构体。
int main(){
struct stu s = {"张三",20,88.5}; //结构体的创建和初始化,s是结构体变量 struct stu是该结构体类型
printf("%s %d %lf\n",s.name,s.gae,s.score);
//结构体成员变量的调用:结构体变量.成员变量
int a = 10;
int *pa = &a //在咱们之前创建指针的时候是 类型 * 指针变量 这样创建的
struct stu *ps = &s //咱们再创建结构体指针也是一样的 也是用 类型 * 指针变量 这个模式来创建
//struct stu是该结构体的结构类型 所以咱们创建时:strucr stu *指针变量。是这样来创建的
return 0;
}
在使用结构体指针就和咱们普通调用结构体又不太一样
结构体指针的使用
在上面的例子中咱们已经初步掌握了结构体指针的创建,那么咱们继续用上面的代码来讲解一下结构体指针的使用
在上面的结构体使用中咱们是用了:结构体变量.成员变量 这个模式。这个结构体变量是一个普通变量,所以咱们就可以用"."这个单目操作符来连接 结构体变量和成员变量
那再咱们是指针的情况下我们就吧"."这个单目操作符改为了"->"箭头操作符其他不变。
即:结构体变量->成员变量
struct stu{
char name[20];
int age; //内部的变量称为成员变量
double score;
};//在1-5行代码中咱们就建好了一个学生的结构体。
int main(){
struct stu s = {"张三",20,88.5}; //结构体的创建和初始化,s是结构体变量 struct stu是该结构体类型
printf("1. %s %d %lf\n",s.name,s.gae,s.score);
//结构体成员变量的调用:结构体变量.成员变量
int a = 10;
int *pa = &a //在咱们之前创建指针的时候是 类型 * 指针变量 这样创建的
struct stu *ps = &s //咱们再创建结构体指针也是一样的 也是用 类型 * 指针变量 这个模式来创建
//struct stu是该结构体的结构类型 所以咱们创建时:strucr stu *指针变量。是这样来创建的
printf("2. %s %d %lf\n",ps->name,ps->age,ps->score);
return 0;
}
但是在前面的第九节咱们就讲过说,用一个解引用操作符来解开指针咱们就可以得到变量的存储空间,那这里也可以适用,咱么把ps改为(*ps)那么我们就可以用"."这个操作符来连接 结构体变量和成员变量
如下
struct stu{
char name[20];
int age; //内部的变量称为成员变量
double score;
};//在1-5行代码中咱们就建好了一个学生的结构体。
int main(){
struct stu s = {"张三",20,88.5}; //结构体的创建和初始化,s是结构体变量 struct stu是该结构体类型
printf("1. %s %d %lf\n",s.name,s.gae,s.score);
struct stu *ps = &s //咱们再创建结构体指针也是一样的 也是用 类型 * 指针变量 这个模式来创建
//struct stu是该结构体的结构类型 所以咱们创建时:strucr stu *指针变量。是这样来创建的
printf("2. %s %d %lf\n",ps->name,ps->age,ps->score);
printf("3. %s %d %lf\n",(*ps).name,(*ps).age,(*ps).score);
return 0;
}
运行结果11行和12行都是一样的而且: ps->name 和 (*ps).name是一样的意思