结构体变量作函数参数

用结构体变量作实参时,采取的是“值传递”的方式。形参必须是同类型的结构体变量。在函数调用期间,形参也要战胜内在单元,系统将实参中各成员的值传递给形参的各个成员。这种传递方式在空间和时间上开销较大。此外,由于采用值传递方式,实参向形参意向传递数据,实参能够影响形参,但形参的值不会影响实参。
例如:
有一个结构体变量stu,内含学生学号、姓名、和3门课程的成绩。要求在函数add10中将小于60分的成绩增加10分,然后输出全 部信息。
【程序源代码】:

#include <stdio.h>

struct stu
{
int num;
char name[10];
float score[3];
}; //唉,此程序犯的唯一错误,少了分号;
void add10(struct stu st2)
{
int i;
for(i=0; i<3; i++)
{
if(st2.score[i]<60)
st2.score[i] += 10;
}
printf("NO.:%d\nName:%s\nScore:%.2f, %.2f, %.2f\n", st2.num, st2.name, st2.score[0],st2.score[1],st2.score[2]);
}
void main(void)
{
struct stu st1 = {13, "Mili", 99.50,59.69, 58.80};
add10(st1);
}
/*VC++6.0中执行结果:
-------------------------
NO.:13
Name:Mili
Score:99.50, 69.69, 68.80
-------------------------
*/

结构体指针作函数参数
用指向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的地址传给形参。
这样形参值的改变会影响到实参的值。
例: 
在main函数中初奴化结构体变量st1,在list函数中改动其分数并显示其信息。看形参某个值的改变是否会影响到实参。

#include <stdio.h>

struct stu
{
int num;
char name[10];
float score;
};
void list(struct stu *p)
{
p->score+=0.31;
printf("NO.:%d\tName:%s\tScore:%.2f\n", (*p).num, p->name, p->score);
}
void main(void)
{
struct stu st1 = {13, "Mili", 99.69};
list(&st1);
printf("NO.:%d\tName:%s\tScore:%.2f\n", st1.num, st1.name, st1.score);
}

/*

------------------------------------

NO.:13 Name:Mili Score:100.00
NO.:13 Name:Mili Score:100.00

------------------------------------

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值