简单不先于复杂,而是在复杂之后。
目录
1. 结构体的声明
1.1 结构体的基础知识
1.2 结构的声明
1.3 结构成员的类型
1.4 结构体变量的定义和初始化
2. 结构体成员的访问
3. 结构体传参
1. 结构体的声明
1.1 结构体的基础知识
结构是一些值的集合,这些值称为成员变量。
结构的每个成员可以是不同类型的变量。
1.2 结构的声明
p1 和 p2 是使用 struct Peo 结构类型创建的两个变量
p1 和 p2 是全局变量,但尽量不要使用。
struct Peo 是类型,不占内存空间。
p1 p2 是结构体变量
1.3 结构成员的类型
结构的成员可以是变量 、数组、指针、甚至是其他结构体。
1.4 结构体变量的定义和初始化
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> struct Peo { char name[20]; char tele[12]; char sex[5]; int high; }p3, p4; struct Peo p5, p6; struct St { struct Peo p; int num; float f; }; int main() { struct Peo p1 = { "张三","123456677","男","181" };//结构体变量的初始化 struct St s = { {"李四","1233244","女","166"}, 100,3.14f }; return 0; }
2. 结构体成员的访问
结构体变量访问成员
结构体变量的成员是通过点操作符(.)访问的。
点操作符接受两个操作数。
例如:
结构体指针访问指向变量的成员:
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
那么该如何访问成员?
如下:
struct Peo { char name[20]; char tele[12]; char sex[5]; int high; }p3,p4; struct Peo p5, p6; struct St { struct Peo p; int num; float f; }; void print2(struct Peo* sp) { printf("%s %s %s %d\n", sp->name, sp->tele, sp->sex, sp->high);//结构体指针->成员变量 } void print1(struct Peo p) { printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high); } int main() { struct Peo p1 = {"张三","123456677","男","181"};//结构体变量的初始化 struct St s = { {"李四","1233244","女","166"}, 100,3.14f}; printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.high);//结构体变量.成员变量 printf("%s %s %s %d %d %f\n", s.p.name,s.p.tele,s.p.sex,s.p.high,s.num,s.f); print1(p1); print2(&p1); return 0; }
3. 结构体传参
函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以导致性能的下降。
总结:结构体传参的时候,要传结构体变量的地址。