c语言 用结构体做函数参数,c语言中用结构体的实例当做函数的参数是什么形式传入的...

本文介绍了C语言中结构体作为函数参数的情况。结构体传值给子函数时,子函数退出后外面函数的值不会修改,子函数修改的是结构体的备份;若要修改结构体的值,需传入结构体指针,文中通过示例代码展示了两种方式的不同输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2018-11-18 回答

就是说结构体是传值给子函数的,当子函数退出时,外面函数的值不会修改。

举个例子来说:

struct s

{

int a;

int b;

};

void change(struct s s)

{

s.a = 10;

s.b = 20;

printf("in change:s.a=%d,s.b=%d\n",s.a,s.b);

}

void main(void)

{

struct s s;

s.a = 1;

s.b = 2;

printf("before change:s.a=%d ,s.b=%d\n",s.a,s.b);

change(s);

printf("after change:s.a=%d ,s.b=%d\n",s.a,s.b);

}

这个函数的输出为:

before change:s.a=1 , s.b=2

in change:s.a=10, s.b=20

after change:s.a=1 , s.b=2

注意,在调用函数前和调用函数后,结构体的值都不变。

在子函数中的值变了,但子函数修改的是结构体s的另外一个备份,而不是结构体指针。

(如果希望能修改结构体的值,需要传入结构体的指针进去)

比如,改为:

struct s

{

int a;

int b;

};

void change(struct s* s)

{

s->a = 10;

s->b = 20;

printf("in change:s.a=%d,s.b=%d\n",s->a,s->b);

}

void main(void)

{

struct s s;

s.a = 1;

s.b = 2;

printf("before change:s.a=%d ,s.b=%d\n",s.a,s.b);

change(&s);

printf("after change:s.a=%d ,s.b=%d\n",s.a,s.b);

}

则输出为:

before change:s.a=1 ,s.b=2

in change:s.a=10,s.b=20

after change:s.a=10 ,s.b=20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值