看板 Examination 關於我們 聯絡資訊
題目出處:第4次全國各級農會-新進九職等以下-程式設計 (填充題 第3題) https://i.imgur.com/qoZ2n9x.png 題目: #include <iostream> using namespace std; int func(int x,int& y,int *z) { x=x+1; y=y+2; z=&x; retuen x+y+*z; //我算出來的x=3,y=6,*z=3,與答案相同 } int main() { int a=2,b=4,c=6; printf("ANS1=%d",func(a,b,&c)); //我算出來的a=2,b=6,c=3,答案為a=2,b=6,c=6 printf("\ANS2=%d",a+b+c); return 0; } 答案(執行的輸出結果): ANS1=12 ANS2=14 我算出來得答案為: ANS1=12 ANS2=11 疑問點: 傳參考和傳址,不是都共用同一塊記憶體嗎? 為何 y=y+2; ,會更改到 b 的值, 而 z=&x; , c 的值還是維持在原本的 6 ? https://i.imgur.com/c1i007A.png -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 192.83.186.60 ※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1525573003.A.7C7.html ※ 編輯: usisiu (192.83.186.60), 05/06/2018 10:17:05
onlyu0402: 1.傳參考會讓變數b和y互為別名,兩者共享同一塊記憶體 05/06 10:49
onlyu0402: 空間 05/06 10:49
onlyu0402: 2.一進入func函數中,z就改指向x了,故c只是用來執行 05/06 10:52
onlyu0402: 函數所傳遞的參數,沒更動到。 05/06 10:52
感謝,原來 z 只是改指標 ※ 編輯: usisiu (114.42.105.93), 05/06/2018 16:51:27
hsr336526: 借問原po知道填空第四題為什麼是4嗎 05/07 10:59
onlyu0402: 雞婆回樓上,C或C++中{}所包括範圍為一個scope 05/07 22:41
onlyu0402: 第一個int a=2為全域變數、第二個a=4是main中的區域變 05/07 22:42
onlyu0402: 數,第三個int a=6為if中的區域變數。 05/07 22:43
onlyu0402: 故不論if條件成立與否,print出來的都是第二個整數a 05/07 22:45
onlyu0402: (注意三個開頭都有int,都是新宣告的敘述) 05/07 22:49
hsr336526: 感謝o大回應 05/07 23:48