這個答案是錯誤的
我用 gcc 跑出來是
3 2 1
3 3 1
7 4 4
10 4 6
我來解釋一下好了,為了解釋方便,我會加註每個變數的 scope
如 global::K, global::L 這兩個是全域變數,Q::K 則是 Q()裡面的K
1 #include<studio.h>
2 long K,L;
3 long P(long X){
4 long L; L=X+1; K=K+1
5 return L+(X++);
6 }
7 long Q(long& X){
8 long K; L=X+1; K=K+1
9 return L+(X++);
10 }
11 int main(){
12 int ans;k=1;L=1;
13 ans=P(K); printf("%3d%3d%3d\n",ans,K,L);
14 ans=P(L); printf("%3d%3d%3d\n",ans,K,L);
15 ans=Q(K); printf("%3d%3d%3d\n",ans,K,L);
16 ans=Q(L); printf("%3d%3d%3d\n",ans,K,L);
17 }
12 global::K=1; global::L=1
13 呼叫P(K),由於是 call by value,所以 P::X 只是值等於 global::K,也就是 1
4 P::L=P::X+1=2; global::K=global::K+1=2;
5 return (P::L+P::X)=3
13 ans=3 global::K=2 global::L=1
14 呼叫P(L),由於是 call by value,所以 P::X 只是值等於 global::L,也就是 1
4 P::L=P::X+1=2; global::K=global::K+1=3;
5 return (P::L+P::X)=3
14 ans=3 global::K=3 global::L=1
15 呼叫Q(K),由於是 call by reference,Q::X 的記憶體位址和 global::K 是一樣的
(以下我就直接把Q::X代換成global::K了)
8 global::L=global::K+1=4; Q::K=Q::K+1=1
9 return (global::L+global::K)=7; (global::K++)=4
15 ans=7 global::K=4 global::L=4
16 呼叫Q(K),由於是 call by reference,Q::X 的記憶體位址和 global::L 是一樣的
(以下我就直接把Q::X代換成global::L了)
8 global::L=global::L+1=5; Q::K=Q::K+1=1
9 return (global::L+global::L)=10; (global::L++)=6
16 ans=10 global::K=4 global::L=6
希望有人看得懂
