- 结构体的声明
- 结构体成员访问
- 结构体传参
结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。
结构成员的类型可以是标量、数组、指针、甚至是其他结构体
struct B {
char c;
short s;
double d;
};
struct Stu {
struct B sb;
char name[20];
int age;
char id[20];
} s1,s2;//s1、s2也是结构体变量
//s1、s2是全局变量
int main() {
//s是局部变量
struct Stu s = { { 'a', 20 , 3.14}, "张三", 18, "1212213213"};//对象
return 0;
}
结构体成员访问
struct B {
char c;
short s;
double d;
};
struct Stu {
struct B sb;
char name[20];
int age;
char id[20];
};
int main() {
//s是局部变量
struct Stu s = { { 'a', 20 , 3.14}, "张三", 18, "1212213213"};//对象
// . ->
printf("%cnn", s.sb.c);
struct Stu* ps = &s;
printf("%cn", (*ps).sb.c);
printf("%cn", ps->sb.c);
return 0;
}
结构体传参
struct B {
char c;
short s;
double d;
};
struct Stu {
struct B sb;
char name[20];
int age;
char id[20];
};
void print1(struct Stu t) {
printf("%c %d %lf %s %d %sn", t.sb.c, t.sb.s, t.sb.d, t.name, t.age, t.id);
}
void print2(struct Stu* ps) {
printf("%c %d %lf %s %d %sn", ps->sb.c, ps->sb.s, ps->sb.d, ps->name, ps->age, ps->id);
}
int main() {
struct Stu s = { { 'a', 20 , 3.14}, "张三", 18, "1212213213" };
print1(s);//传值调用
print2(&s);//传址调用
return 0;
}
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
栈是一种数据结构,特点是先进的后出,后进的先出;
给栈中存放数据的操作叫压栈,删除栈中数据的操作叫出栈;
每个函数调用都会在内存的栈区上开辟一块空间。
所以我我们在给结构体传参的时候要尽量传地址。



