#include <stdio.h>
int a1=300,a2=400;
void sub1(int x,int y)
{ a1=x;
x=y;
y=a1;
}
int main( )
{
int a3=100,a4=200;
sub1(a3,a4);
sub1(a1,a2);
printf("%d,%d,%d,%d\n",a1,a2,a3,a4);
return 0;
}
求解答一下為什么輸出是100,400,100,200
uj5u.com熱心網友回復:
因為sub1這個函式是傳值呼叫,也就是說這個函式獲得引數值的一份拷貝。函式修改這個拷貝值,但并不影響呼叫程式實際傳遞給它的引數。uj5u.com熱心網友回復:
void sub1(int x,int y){ a1=x;
x=y;
y=a1;
}
函式改成:
void sub1(int *x, int *y)
{
a1=*x;
*x = *y;
*y = a1;
}
main函式中這樣呼叫
sub1(&a3, &a4);
uj5u.com熱心網友回復:
a1是全域變數,a1的值是最后一次給其賦值的值。第一次是300賦值個a1,得到100,第二次是a1賦值給a1,即還是保存100.
a2, a3,a4的值不變,不變的原因是交換的引數是變數而非地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110094.html
標籤:C語言
上一篇:用7Zip只能壓縮單檔案,我想要壓縮整個檔案,那位大神知道了,求解啊,萬分感謝啊、、、急急急。。。。
下一篇:演算法測驗題求助
