1.结构体诞生的由来
C语言已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学生,描述⼀本书,这时单一的内置类型是不行的。描述⼀个学生需要名字、年龄、学号、身高、体重等;描述⼀本书需要作者、出版社、定价等。C语言为了解决这个问题,增加了结构体这种自定义的数据类型,让程序员可以自己创造适合的类型。
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如:
标量、数组、指针,甚至是其他结构体。
2.结构体变量的定义和初始化
//代码1:变量的定义 struct Point { int x; int y;//x,y是成员变量 }p1; //声明类型的同时定义变量p1 struct Point p2; //定义结构体变量p2 //代码2:初始化。 struct Point p3 = { 10, 20 }; struct Stu //类型声明 { char name[15]; //名字 int age; //年龄 }; struct Stu s1 = { "zhangsan", 20 }; //初始化 struct Stu s2 = { .age = 20, .name = "lisi" }; //指定顺序初始化 //代码3 struct Node { int data; struct Point p; struct Node* next; }n1 = { 10, {4,5}, NULL }; //结构体嵌套初始化 struct Node n2 = { 20, {5, 6}, NULL }; //结构体嵌套初始化
3.结构体成员的直接访问
结构体成员的直接访问是通过点操作符(.)访问的。点操作符接受两个操作数。
使用方式:结构体变量.成员名
如:
#include <stdio.h> struct Point { int x; int y; }p = { 1,2 }; int main() { printf("x: %d y: %d\n", p.x, p.y); return 0; }
4.结构成员的间接访问
有时候我们得到的不是一个结构体变量,而是得到了一个指向结构体的指针。
使用方式:结构体指针->成员名
如下所示:
#include <stdio.h> struct Point { int x; int y; }; int main() { struct Point p = { 3, 4 }; struct Point* ptr = &p; ptr->x = 10; ptr->y = 20; printf("x = %d y = %d\n", ptr->x, ptr->y); return 0; }
综合举例:
#include <stdio.h> #include <string.h> struct Stu { char name[15]; //名字 int age; //年龄 }; void print_stu(struct Stu s) { printf("%s %d\n", s.name, s.age); } void set_stu(struct Stu* ps) { strcpy(ps->name, "李四"); ps->age = 28; } int main() { struct Stu s = { "张三", 20 }; print_stu(s); set_stu(&s); print_stu(s); return 0; }
只有一点小小归纳,希望能帮到大家!
如果大家发现知识点错误的话,请帮忙指出,十分感谢!!
也请大家帮忙点赞、评论,这将督促我前行,大家一起加油!!!