PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   關於資料結構..call by *** (https://www.pcdvd.com.tw/showthread.php?t=561030)

m5a8258 2005-11-19 01:28 AM

關於資料結構..call by ***
 
請問各位大大們..請問一下資料結構問題
call by address 傳址
call by name 傳名
call by reference

怎麼運作以及舉例呢??

另外.. *x 指的是x的pointer指標
&x 指的是x的記憶體位置
降子對嗎??
感謝囉....

附上一個題目
Consider the following C/C++ programs:
Give the output of the following C++ program
#include<studio.h>
long K,L;
long P(long X){
long L; L=X+1; K=K+1
return L+(X++);
}
long Q(long& X){
long K; L=X+1; K=K+1
return L+(X++);
}
int main(){
int ans;k=1;L=1;
ans=P(K); printf("%3d%3d%3d\n",ans,K,L);
ans=P(L); printf("%3d%3d%3d\n",ans,K,L);
ans=Q(K); printf("%3d%3d%3d\n",ans,K,L);
ans=Q(L); printf("%3d%3d%3d\n",ans,K,L);
}

答案是
4 1 2
6 1 3
4 2 2
7 2 4

小弟比較不明白的是ans=Q(L)這段...的L+(X++)..因為是採用call by reference..ans
答案怎麼會是7...??
煩請解惑..thanks

m5a8258 2005-11-19 01:52 AM

沉下去了 :ase
推一下... :agree:

b9156032 2005-11-19 01:58 AM

call by address:副程式宣告的變數的記憶體位址和主程式傳過去的變數是相同的
所以副程式裡面變數如果有變化主程式也會跟著變
EX:INT A(INT *X){
X++;
}
MAIN(){
INT B=0;
A(B);
?B;//會印出1
}
call by name:compiler 在編譯的時候會直接把副程式裡面的x直接改成變數b
call by reference:不知道怎解釋....

m5a8258 2005-11-19 02:10 AM

引用:
作者b9156032
call by address:副程式宣告的變數的記憶體位址和主程式傳過去的變數是相同的
所以副程式裡面變數如果有變化主程式也會跟著變
EX:INT A(INT *X){
X++;
}
MAIN(){
INT B=0;
A(B);
?B;//會印出1
}
call by name:compiler 在編譯的時候會直接把副程式裡面的x直接改成變數b
call by reference:不知道怎解釋....


我找到一個call by reference的例子了..請看看是不是這樣
sum(x,y){
x=x+y
}

Main(){
a=2;b=3;
sum(a,b);
write(a,b);
}

call by value的結果會是2,3
call by reference結果會是5,3
那call by address跟call by name呢?? :confused:

b9156032 2005-11-19 02:19 AM

這樣解釋吧 只有call-by-value 不會有side effect 就是副程式裡面改變的量
不會影響到 主程式裡面的變數 因為主副程式裡面變數是佔用不同的記憶體空間
其他的 翻書囉 加油~

qwerty 2005-11-19 02:20 AM

http://en.wikipedia.org/wiki/Evaluation_strategy
看來看去還是這個最清楚 orz

m5a8258 2005-11-19 02:23 AM

引用:
作者b9156032
這樣解釋吧 只有call-by-value 不會有side effect 就是副程式裡面改變的量
不會影響到 主程式裡面的變數 因為主副程式裡面變數是佔用不同的記憶體空間
其他的 翻書囉 加油~

call by value這我曉得..感謝回應..

除了call by value之外其他的傳遞法都有side effect.. :agree:

上面題目幫忙一下喔...^^"

m5a8258 2005-11-19 02:49 AM

引用:
作者計程車屠夫
嗯...... 以前學的早就還回去了.....


出來寫的..總有一天要還的 :laugh:
造橋鋪路無屍骸.殺人放火金腰帶 :D :D :D :D
參數傳遞法沒弄清楚還真睡不著呢 :cry:

isamuplus 2005-11-19 05:19 AM

引用:
作者m5a8258
小弟比較不明白的是ans=Q(L)這段...的L+(X++)..因為是採用call by reference..ans
答案怎麼會是7...??
煩請解惑..thanks


P函式宣告了一個新的Long L,表示函式內的這個L和函式外的L並不是同一個
變數,所以當L = X + 1的時候,函式內的L就被初始化而有值。

但是Q函式裡面宣告了一個新的Long K,沒給初值而且又有K=K+1這種運算敘
述,到底是哪個天才寫出來的程式...?


所有的時間均為GMT +8。 現在的時間是06:18 PM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。