![]() |
||
|
Major Member
![]() 加入日期: 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 此文章於 2005-11-19 01:38 AM 被 m5a8258 編輯. |
|||||||
|
|
|
Major Member
![]() 加入日期: Apr 2001 您的住址: 藍色星球
文章: 223
|
沉下去了
推一下... ![]() |
||
|
|
|
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 編輯. |
|
|
|
Major Member
![]() 加入日期: Apr 2001 您的住址: 藍色星球
文章: 223
|
引用:
我找到一個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呢?? ![]() |
|
|
|
|
Basic Member
加入日期: Feb 2004
文章: 10
|
這樣解釋吧 只有call-by-value 不會有side effect 就是副程式裡面改變的量
不會影響到 主程式裡面的變數 因為主副程式裡面變數是佔用不同的記憶體空間 其他的 翻書囉 加油~ |
|
|
|
Senior Member
![]() ![]() ![]() 加入日期: Aug 2001 您的住址: TaiPei
文章: 1,165
|
http://en.wikipedia.org/wiki/Evaluation_strategy
看來看去還是這個最清楚 orz 此文章於 2005-11-19 04:04 AM 被 qwerty 編輯. |
|
|
|
Major Member
![]() 加入日期: Apr 2001 您的住址: 藍色星球
文章: 223
|
引用:
call by value這我曉得..感謝回應.. 除了call by value之外其他的傳遞法都有side effect.. ![]() 上面題目幫忙一下喔...^^" 此文章於 2005-11-19 02:32 AM 被 m5a8258 編輯. |
|
|
|
|
Major Member
![]() 加入日期: Apr 2001 您的住址: 藍色星球
文章: 223
|
引用:
出來寫的..總有一天要還的 造橋鋪路無屍骸.殺人放火金腰帶 參數傳遞法沒弄清楚還真睡不著呢 ![]() |
|
|
|
|
Junior Member
![]() ![]() ![]() 加入日期: Aug 2004
文章: 883
|
引用:
P函式宣告了一個新的Long L,表示函式內的這個L和函式外的L並不是同一個 變數,所以當L = X + 1的時候,函式內的L就被初始化而有值。 但是Q函式裡面宣告了一個新的Long K,沒給初值而且又有K=K+1這種運算敘 述,到底是哪個天才寫出來的程式...? |
|
|
|