结构体参数
結(jié)構(gòu)體作為函數(shù)參數(shù):
#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; }結(jié)構(gòu)體作為函數(shù)參數(shù)時(shí),實(shí)參傳入地址,形參用指針接收。
?
運(yùn)行結(jié)果;
exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct2
name = mike,age = 100
?
如果函數(shù)參數(shù)的結(jié)構(gòu)特別大,比如name[10000],會(huì)導(dǎo)致入棧速度變得很大,棧的內(nèi)存變得很大,程序運(yùn)行效率很低,所以一般來(lái)說(shuō)不要把結(jié)構(gòu)變量作為函數(shù)參數(shù)傳遞。
#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; }運(yùn)行結(jié)果:exbot@ubuntu:~/wangqinghe/C/20190714$ gcc struct2.c -o struct2
exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct2
name = mike,age = 100
?
結(jié)論:在定義一個(gè)和結(jié)構(gòu)體有關(guān)的函數(shù)時(shí),盡量使用指針,而不是使用結(jié)構(gòu)變量。因?yàn)槭褂弥羔?#xff0c;只需要傳遞地址大小的數(shù)據(jù)。
轉(zhuǎn)載于:https://www.cnblogs.com/wanghao-boke/p/11183150.html
總結(jié)
- 上一篇: 成都欢乐谷年卡多少钱
- 下一篇: 请问java 结果集list,根据use