求問c語言 #include <stdio.h> void fun(char *c,int d) {*c=*c+1,d=d+1; printf("%c,%c",*c,d); } main() {char b='a', a='A'; fun(&b,a);printf( "%c,%c\n" ,,b,a ); }這道題的結(jié)果為什麼是bBbA呀
2 回答

忽然笑
TA貢獻(xiàn)1806條經(jīng)驗 獲得超5個贊
代碼是給人看的,不是給機器看的,注意格式,整成這一行算什么。。。
fun執(zhí)行的時候,會把每個變量+1然后打印,所以會先打印bB
執(zhí)行完后,因為fun的第一個參數(shù)是指針,而在fun函數(shù)里對指針的引用意味著會改變指針指向的變量的值。也就是說變量b的內(nèi)容在執(zhí)行完函數(shù)fun后,已經(jīng)+1了也就是變成‘b’了。所以再打印就是bA
這個要理解c的函數(shù)調(diào)用時參數(shù)傳遞的過程到底發(fā)生了什么,c的函數(shù)在調(diào)用的時候,會把參數(shù)變量復(fù)制一份(說簡單點是拷貝到棧中,再具體的話就有點麻煩了,自己看書吧。。。),也就是說在函數(shù)fun中,參數(shù)d雖然值會等于傳入的變量a,但是它是另外一個變量了,所以操作d不會影響a;參數(shù)c是指針,它也是另外一個變量,操作c本身不會影響傳入的變量,但是操作c指向的內(nèi)容(*c)會改變它指向的空間,這個和&b指向的空間是一樣的,所以b的內(nèi)容會改變。
- 2 回答
- 0 關(guān)注
- 822 瀏覽
添加回答
舉報
0/150
提交
取消