结构体是一种自定义的数据类型,它将不同的变量、数据类型和数组聚集到一个单独的单元中。
结构体可以让我们去描述复杂对象。例如,结构体可以用于存储学生的姓名、年龄、成绩等信息。再比如,结构体可以用于存储一本书的书名,作者,出版社等信息。
=========================================================================
无论是上面举例提到的学生亦或是书籍在C语言中都没有相应的类型与之对应,而我们就可以借助结构体去创建一个新的类型出来。
- //创建一个学生类型
- struct Student
- {
- char name[20];
- int age;
- double score;
- };
-
- //创建一个书的类型
- struct Book
- {
- char name[20];
- float price;
- char id[30];
- };
如上所示,这样我们就创建出了一个新的类型。
-
- //创建一个学生类型
- struct Student
- {
- char name[20];
- int age;
- double score;
- };
-
- //创建一个书的类型
- struct Book
- {
- char name[20];
- float price;
- char id[30];
- };
-
- int main()
- {
- struct Student s = {"张三",20,85.5};
- //结构体的初始化
-
- return 0;
- }
这时就将名字,年龄,分数等信息赋给了 s ,这时也就完成了结构体的初始化。
---------------------------------------------------------------------------------------------------------------------------------
-
- //创建一个学生类型
- struct Student
- {
- char name[20];
- int age;
- double score;
- };
-
- //创建一个书的类型
- struct Book
- {
- char name[20];
- float price;
- char id[30];
- };
-
- int main()
- {
- struct Student s = {"张三",20,85.5};
- //结构体的初始化
-
- return 0;
- }
还是以这段代码举例,其中结构体中的 name、price、id、age、score 这些都是结构体变量。而在结构体的初始化中的 s 则称为成员变量 。
-
- //创建一个学生类型
- struct Student
- {
- char name[20];
- int age;
- double score;
- };
-
-
- int main()
- {
- struct Student s = {"张三",20,85.5};
- //结构体的初始化
-
- printf("%s %d %lf\n" , s.name , s.age , s.score);
-
- return 0;
- }
这时如果想打印结构体成员 s ,就需要借助操作符 .
作用是找到这个结构体的成员访问他的成员变量。用法就是结构体变量.成员变量。
---------------------------------------------------------------------------------------------------------------------------------
除了上面展示的方法打印,还可以运用上次写到的指针来打印。
-
- //创建一个学生类型
- struct Student
- {
- char name[20];
- int age;
- double score;
- };
-
-
- int main()
- {
- struct Student s = {"张三",20,85.5};
- //结构体的初始化
-
- printf("1:%s %d %lf\n" , s.name , s.age , s.score);
-
- struct Student * pa = &s;
- printf("2:%s %d %lf\n" , (*pa).name , (*pa).age , (*pa).score);
-
-
- return 0;
- }
这样就是借助指针,找到结构体变量的位置,然后使用 . 操作符再次打印。
当然这样还是太繁琐了,不够直观。
-
- //创建一个学生类型
- struct Student
- {
- char name[20];
- int age;
- double score;
- };
-
-
- int main()
- {
- struct Student s = {"张三",20,85.5};
- //结构体的初始化
-
- printf("1:%s %d %lf\n" , s.name , s.age , s.score);
-
- struct Student * pa = &s;
- printf("2:%s %d %lf\n" , (*pa).name , (*pa).age , (*pa).score);
-
- printf("3:%s %d %lf\n" , ps->name , ps->age , ps->score);
-
- return 0;
- }
这第三种写法就等价于第二种写法,不过更加直观。先通过 ps 先找到他 . 的对象 ,然后再找到他成员里的变量。总结一下就是结构体指针->成员变量名。
而这三种方法打印出的结果都是完全相同。