赞
踩
如题,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); }
不过略显麻烦...或许是我想得不够精炼...
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。