C语⾔关于结构体做参数传递⾸先结构体做函数参数有三种传递⽅式
⼀是传递结构体变量,这是值传递,⼆是传递结构体指针,这是地址传递,三是传递结构体成员,当然这也分为值传递和地址传递。
以传引⽤调⽤⽅式传递结构⽐⽤传值⽅式传递结构效率⾼。以传值⽅式传递结构需要对整个结构做⼀份拷贝。
下⾯看⼀个列⼦,student结构体中包含该学⽣的各种信息,我们在change函数中对其进⾏部分修改,再在主函数中输出其结果
1.下⾯传递结构体变量
#include<stdio.h>
结构体数组不能作为参数传递给函数#include<string.h>
#define format "%d\n%s\n%f\n%f\n%f\n"
struct student
{
int num;
char name[20];
float score[3];
};
void change( struct student stu );
int main()
{
struct student stu;
stu.num = 12345;
strcpy(stu.name, "Tom");
stu.score[0] = 67.5;
stu.score[1] = 89;
stu.score[2] = 78.6;
change(stu);
printf(format, stu.num, stu.name, stu.score[0], stu.score[1],stu.score[2]);
printf("\n");
return 0;
}
void change(struct student stu)
{
stu.score[0] = 100;
strcpy(stu.name, "jerry");
}
可以看到最终输出的值并未改变。。。
2.地址传递
<span >#include<stdio.h>
#include<string.h>
#define format "%d\n%s\n%f\n%f\n%f\n"
struct student
{
int num;
char name[20];
float score[3];
};
void change( struct student* stu );
int main()
{
struct student stu;
stu.num = 12345;
strcpy(stu.name, "Tom");
stu.score[0] = 67.5;
stu.score[1] = 89;
stu.score[2] = 78.6;
change(&stu);
printf(format, stu.num, stu.name, stu.score[0], stu.score[1],stu.score[2]);
printf("\n");
return 0;
}
void change(struct student* p)
{
p->score[0] = 100;
strcpy(p->name, "jerry");
}</span>
可以看到,通过地址传递修改了结构体内的数据
⽤&stu做实参,&stu是结构体变量stu的地址。在调⽤函数时将该地址传送给形参p(p是指针变量)。这样p就指向stu。
在change函数中改变结构体内成员的值,在主函数中就输出了改变后的值
3.结构体成员的地址传递和值传递
这个类似于单⼀变量的传递,这⾥也没必要说了,当然是地址传递才能修改。
把⼀个完整的结构体变量作为参数传递,要将全部成员值⼀个⼀个传递,费时间⼜费空间,开销⼤。如果结构体类型中的成员很多,或有⼀些成员是数组,则程序运⾏效率会⼤⼤降低。在这种情况下,⽤指针做函数参数⽐较好,能提⾼运⾏效率。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论