????在書本上看到形參與實參有兩種截然不同的結(jié)合方式,一個是地址結(jié)合,一個是數(shù)值結(jié)合。????但是卻沒有舉例在什么情況下可以地址結(jié)合,什么情況可以數(shù)值結(jié)合。求大神回答回答。
2 回答
已采納

1100001
TA貢獻10條經(jīng)驗 獲得超14個贊
其實都是傳遞值,不過一種是傳遞地址的值,另一種是傳遞變量值,前一種被調(diào)用函數(shù)獲得地址之后,可以通過地址改變地址指向的變量的值,后一種在將值傳過去再return返回之后兩個函數(shù)就沒什么關(guān)系了。
比如第一種是這樣的:
#include?"stdio.h" void?h(int?a,int?b); int?main() { ????int?a=3,b=4; ????h(a,b); ????printf("%d,%d",a,b); } void?h(int?a,int?b) { ????a+=b; ????b=a-b; ????b=a-b; }
在執(zhí)行之后,printf輸出的仍是3,4,也就是說函數(shù)h里面執(zhí)行的交換和主函數(shù)完全沒有關(guān)系,形參和實參是完全不同的地址,不同的兩個變量,只是形參臨時被賦了實參的值,這就是所謂的數(shù)值結(jié)合;
然后第二種是這樣的:
#include?"stdio.h" void?h(int?*a,int?*b); main() { ????int?a=3,b=4; ????h(&a,&b); ????printf("%d,%d",a,b); } void?h(int?*a,int?*b) { ????*a+=*b; ????*b=*a-*b; ????*b=*a-*b; }
在執(zhí)行后printf函數(shù)輸出的是4,3;因為主函數(shù)傳給函數(shù)h的是a和b的地址,被調(diào)用函數(shù)通過地址,調(diào)換了主函數(shù)中a,b的值;這就是地址結(jié)合;

迷途的馬爾斯
TA貢獻72條經(jīng)驗 獲得超106個贊
給一道題你做一下你就懂了:
#include?<stdio.h> int?fun(int?a[],int?n,int?x); void?main() { ????int?a[]?=?{6,9,0,7,4,2}; ????printf("%d",fun(a,5,5)); } int?fun(int?a[],int?n,int?x) { ????int?i; ????for(i=0;i<n;i++) ????{ ????????if(a[i]==x) ????????{ ????????????return?i; ????????} ????} ????return?-1; }
- 2 回答
- 0 關(guān)注
- 1856 瀏覽
添加回答
舉報
0/150
提交
取消