结构体初阶
-
结构体定义
-
结构体初始化
-
结构体访问
//结构体定义、初始化、访问 struct B { int x; char y; }; struct str { struct B sb; char name[5]; int age; char id[10]; }; int main() { struct str s = { {10,'b'},"姿态",18,"202401"}; printf("%d %c %s %d %s\n",s.sb .x,s.sb.y,s.name,s.age,s.id); return 0; }
-
结构体传参
//结构体作为参数 传参 struct B { int x; char y; }; struct str { struct B sb; char name[5]; int age; char id[10]; }; void my_printf_1(struct str t) {//传值 printf("%d %c %s %d %s\n", t.sb.x, t.sb.y, t.name, t.age, t.id); } void my_printf_2(struct str* p) {//传址;更推荐:更环保,且更能防止栈溢出 printf("%d %c %s %d %s\n", p->sb.x, p->sb.y, p->name, p->age, p->id); } int main() { struct str s = { {10,'b'},"姿态",18,"202401" }; my_printf_1(s); struct str* p = &s; my_printf_2(p); return 0; }
上面的my_print_1和my_print_2函教
答案是:首选my_print_2函数。原因:
函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
结论:结构体传参的时候,要传结构体的地址。