結構體作為函數參數:
#include<stdio.h> #include<stdlib.h> #include<string.h>struct student {char name[10];int age; };void print_student(struct student s) {printf("name = %s,age = %d\n",s.name,s.age); } void set_student(struct student *s,char *name,int age) {strcpy(s->name,name);s->age = age; }int main() {struct student st = {"tom",20};set_student(&st,"mike",100);print_student(st);return 0; }
結構體作為函數參數時,實參傳入地址,形參用指針接收。
?
運行結果;
exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct2
name = mike,age = 100
?
如果函數參數的結構特別大,比如name[10000],會導致入棧速度變得很大,棧的內存變得很大,程序運行效率很低,所以一般來說不要把結構變量作為函數參數傳遞。
#include<stdio.h> #include<stdlib.h> #include<string.h>struct student {char name[10];int age; };void print_student(const struct student *s) {printf("name = %s,age = %d\n",s->name,s->age); } void set_student(struct student *s,char *name,int age) {strcpy(s->name,name);s->age = age; }int main() {struct student st = {"tom",20};set_student(&st,"mike",100);print_student(&st);return 0; }
運行結果:exbot@ubuntu:~/wangqinghe/C/20190714$ gcc struct2.c -o struct2
exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct2
name = mike,age = 100
?
結論:在定義一個和結構體有關的函數時,盡量使用指針,而不是使用結構變量。因為使用指針,只需要傳遞地址大小的數據。