C語言函式傳遞中形參的變化不會改變實參的值
如題,C語言在函式間傳遞引數時,形參的變化是不會改變實參的值的!!!
如:
include<stdio.h>
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);
}