PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
m5a8258
Major Member
 
m5a8258的大頭照
 

加入日期: Apr 2001
您的住址: 藍色星球
文章: 223
關於資料結構..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
     
      
__________________
My Blog
http://www.chengwei.idv.tw

此文章於 2005-11-19 01:38 AM 被 m5a8258 編輯.
舊 2005-11-19, 01:28 AM #1
回應時引用此文章
m5a8258離線中  
m5a8258
Major Member
 
m5a8258的大頭照
 

加入日期: Apr 2001
您的住址: 藍色星球
文章: 223
沉下去了
推一下...
 
__________________
My Blog
http://www.chengwei.idv.tw
舊 2005-11-19, 01:52 AM #2
回應時引用此文章
m5a8258離線中  
b9156032
Basic Member
 

加入日期: Feb 2004
文章: 10
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:不知道怎解釋....

此文章於 2005-11-19 02:04 AM 被 b9156032 編輯.
舊 2005-11-19, 01:58 AM #3
回應時引用此文章
b9156032離線中  
m5a8258
Major Member
 
m5a8258的大頭照
 

加入日期: Apr 2001
您的住址: 藍色星球
文章: 223
引用:
作者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呢??
__________________
My Blog
http://www.chengwei.idv.tw
舊 2005-11-19, 02:10 AM #4
回應時引用此文章
m5a8258離線中  
b9156032
Basic Member
 

加入日期: Feb 2004
文章: 10
這樣解釋吧 只有call-by-value 不會有side effect 就是副程式裡面改變的量
不會影響到 主程式裡面的變數 因為主副程式裡面變數是佔用不同的記憶體空間
其他的 翻書囉 加油~
舊 2005-11-19, 02:19 AM #5
回應時引用此文章
b9156032離線中  
qwerty
Senior Member
 

加入日期: Aug 2001
您的住址: TaiPei
文章: 1,165
http://en.wikipedia.org/wiki/Evaluation_strategy
看來看去還是這個最清楚 orz

此文章於 2005-11-19 04:04 AM 被 qwerty 編輯.
舊 2005-11-19, 02:20 AM #6
回應時引用此文章
qwerty離線中  
m5a8258
Major Member
 
m5a8258的大頭照
 

加入日期: Apr 2001
您的住址: 藍色星球
文章: 223
引用:
作者b9156032
這樣解釋吧 只有call-by-value 不會有side effect 就是副程式裡面改變的量
不會影響到 主程式裡面的變數 因為主副程式裡面變數是佔用不同的記憶體空間
其他的 翻書囉 加油~

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

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

上面題目幫忙一下喔...^^"
__________________
My Blog
http://www.chengwei.idv.tw

此文章於 2005-11-19 02:32 AM 被 m5a8258 編輯.
舊 2005-11-19, 02:23 AM #7
回應時引用此文章
m5a8258離線中  
m5a8258
Major Member
 
m5a8258的大頭照
 

加入日期: Apr 2001
您的住址: 藍色星球
文章: 223
引用:
作者計程車屠夫
嗯...... 以前學的早就還回去了.....


出來寫的..總有一天要還的
造橋鋪路無屍骸.殺人放火金腰帶
參數傳遞法沒弄清楚還真睡不著呢
__________________
My Blog
http://www.chengwei.idv.tw
舊 2005-11-19, 02:49 AM #9
回應時引用此文章
m5a8258離線中  
isamuplus
Junior Member
 

加入日期: Aug 2004
文章: 883
Red face

引用:
作者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這種運算敘
述,到底是哪個天才寫出來的程式...?
舊 2005-11-19, 05:19 AM #10
回應時引用此文章
isamuplus離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是05:46 AM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。