- 结构体是一种构造数据类型
- 把不同类型的数据组合成一个整体
- 结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
- 需要注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。
- #include
- struct People
- {
- char name[20];
- int age;
- char sex[5];
- char tele[12];
- int high;
- }p1,p2;
- //p1,p2是两个全局变量的结构体变量
- int main()
- {
- return 0;
- }
- #include
- struct People
- {
- char name[20];
- int age;
- char sex[5];
- char tele[12];
- int high;
- };
- int main()
- {
- struct People p1;//结构体变量的创建
- return 0;
- }
注意:不要忘记分号!在结束花括号后的分号表示结构体设计定义的结束;
结构体成员可以是标量、数组、指针、甚至是其他结构体
初始化:定义变量的同时赋初值
定义的三种方式(上面提到了):
- #include
- struct People
- {
- char name[20];
- int age;
- char sex[5];
- char tele[12];
- int high;
- }p1,p2;
- //p1,p2是两个全局变量的结构体变量
- struct People p3;//全局变量
- int main()
- {
- struct People p4;//局部变量
- return 0;
- }
-
赋值并打印(嵌套):
- #include
- struct Peo
- {
- char name[20];
- int age;
- char sex[5];
- };
- struct BOOK
- {
- int page;
- struct Peo s;
- };
- int main()
- {
- struct Peo p1 = { "blf",19,"boy" };
- struct BOOK p2 = { 65,{"qsl",19,"girl"} };
- printf("%s %d %s\n", p1.name, p1.age, p1.sex);
- printf("%d %s %d %s\n", p2.page, p2.s.name, p2.s.age, p2.s.sex);
-
- return 0;
- }
输出结果:blf 19 boy
65 qsl 19 girl
- C语言规定,结构体的普通成员可以通过运算符“点.”去访问其成员
- 点操作符接受两个操作数。
- 引用形式:<结构体类型变量名>.<成员名>
- 结构体指针变量如何访问其成员:可以通过箭头符号的方式去访问其成员
- (*p).name = = p -> name 左右两种方式等价
- 结构体成员如果是字符串,不能直接通过符号“=”去修改值,可以通过C语言中的拷贝函数strcpy去修改值
配合代码理解:
- #include
- struct Peo
- {
- char name[20];
- int age;
- char sex[5];
- };
- struct BOOK
- {
- int page;
- struct Peo s;
- };
- void print1(struct Peo p)
- {
- printf("%s %d %s\n", p.name, p.age, p.sex);
- }
- void print2(struct Peo* sp1)
- {
- printf("%s %d %s\n", sp1->name, sp1->age, sp1->sex);
- printf("%s %d %s\n", (*sp1).name, (*sp1).age, (*sp1).sex);
- }
- int main()
- {
- struct Peo p1 = { "blf",19,"boy" };
- struct BOOK p2 = { 65,{"qsl",19,"girl"} };
- printf("%s %d %s\n", p1.name, p1.age, p1.sex);
- printf("%d %s %d %s\n", p2.page, p2.s.name, p2.s.age, p2.s.sex);
- print1(p1);
- print2(&p1);
- return 0;
- }
- 函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降;
- 结论:结构体传参时,要传结构体的地址