c语言函数形参发生改变,C语言函数传递中形参的变化不会改变实参的值

如题,C语言在函数间传递参数时,形参的变化是不会改变实参的值的!!!

如:

include

void main(){

void swap(int,int);

int a,b;

scanf("%d,%d",&a,&b);

swap(a,b);

}

void swap(int a,int b){

int temp;

temp = a;

a = b;

b = temp;

}

因为形参与实参的内存单元不同,所以,只是值传递,并不能直接进行值修改。

为此,有两种方法可以解决这个问题:

一个是传递指针,另一个是用return返回值到该变量。

传递指针:

void main(){

void swap(int *,int *);

int a,b;

scanf("%d,%d",&a,&b);

swap(&a,&b);

}

void swap(int * a,int * b){

int temp;

temp = *a;

*a = *b;

*b = temp;

}

使用return返回值:

因为此处定义了两个变量,C语言并不支持多值返回,所以可以返回指针,具体可以是返回结构体,或者是数组。

返回结构体:

struct test{

int a;

int b;

};

void main(){

struct test aa;

struct test swap(int,int);

scanf("%d,%d",&aa.a,&aa.b);

aa = swap(aa.a,aa.b);

printf("%d,%d",aa.a,aa.b);

}

struct test swap(int a,int b){

struct test aa;

aa.a = b;

aa.b = a;

return(aa); }

返回数组指针:

void main(){

int a[2];

int *p;

int * swap(int,int);

scanf("%d,%d",&a[0],&a[1]);

p = swap(a[0],a[1]);

a[0] = p[0];

a[1] = p[1];

printf("%d,%d",a[0],a[1]);

}

int * swap(int a,int b){

int c[2];

c[0] = b;

c[1] = a;

return(c); }

不过略显麻烦...或许是我想得不够精炼...

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值