English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

void change(char*c)
{
printf(\"Before: *c is %c\\t\", *c);
*c = \'z\';
printf(\"After : *c is %c\\t\", *c);
}
int main(void)
{
char ch =\'a\';
printf(\"Before : ch is %c\\t\", ch);
change(&ch);
printf(\"After : ch is %C\\t\", ch);
return(0);
}
請問 執行結果??
Before : ch is ? Before : *c is ? After : *c is ? After : ch is ?
我個人是決覺得是 : a,a,z,a....不知道對不對...

2006-07-09 10:16:14 · 2 個解答 · 發問者 ? 5 in 電腦與網際網路 程式設計

2 個解答

不對, 是 a,a,z,z你的 change 是用傳址呼叫, 用這樣的方式, 你的 *c 實際上就代表了傳入的 ch, 你會這麼認為, 代表你對這部份還不熟悉, 建議你書本這個部份多看幾次就會了解另外, 如果與其要問執行結果, 你自己執行看看不就知道了? 如果要學習程式語言, 最好手邊有編譯器, 隨時想到什麼就自己試試看, 這樣學習會比較有成果; 如果你連編譯器都沒有, 網路上有免費的 Dev C++ 可以下載, 搜尋一下很好找, 多寫你就會熟悉

2006-07-10 12:32:05 補充:
不是『ch 會改變 *c』,而式呼叫change(&ch)的時候,函式包含了ch的位址傳過去,所以對change而言,他看到的是 c 儲存了 ch 的位址,因此 *c 就指向 ch 的資料,而你change函式並沒有傳回值,所以也沒有所謂『*c再傳回去給ch』,ch並不是在change函式呼叫結束才變成 z ,而是在 change 當中執行到 *c='z';這行就變成 z 了,這麼說你明白嗎?

2006-07-09 10:48:59 · answer #1 · answered by Rody 5 · 0 0

答案是 a a z %C 才對! ^_^
因為你把最後一個 %c 打成了 %C :D

玩笑開完了。
Rody 答案、更是〝解說〞的是對的!
所以, 我投 Rody 一票!

2006-07-11 01:38:27 · answer #2 · answered by ? 7 · 0 0

fedest.com, questions and answers