C++ 程式指標 疑問 - 考試

Table of Contents


題目出處:第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

--

All Comments

David avatarDavid2018-05-10
1.傳參考會讓變數b和y互為別名,兩者共享同一塊記憶體
空間
Harry avatarHarry2018-05-13
2.一進入func函數中,z就改指向x了,故c只是用來執行
函數所傳遞的參數,沒更動到。
Xanthe avatarXanthe2018-05-18
借問原po知道填空第四題為什麼是4嗎
Hazel avatarHazel2018-05-19
雞婆回樓上,C或C++中{}所包括範圍為一個scope
Doris avatarDoris2018-05-23
第一個int a=2為全域變數、第二個a=4是main中的區域變
Lily avatarLily2018-05-25
數,第三個int a=6為if中的區域變數。
Yedda avatarYedda2018-05-26
故不論if條件成立與否,print出來的都是第二個整數a
Gary avatarGary2018-05-28
(注意三個開頭都有int,都是新宣告的敘述)
Caroline avatarCaroline2018-06-01
感謝o大回應