2009年5月1日 星期五

自我學習:函式返回指標


有關於函式返回指標

也就是 int func1() 和 int &func2() 的差別

一般而言

假設{}內容都是return n;

int func1() 所返回的值會先放至在一個暫時性變數TP中

這個TP會再進入func1時生成,出來結束指令後消失

所以可以用一個變數去接

例如: int a = func1();

會變成 N -> TP -> a

TP會再將值傳入a後,即被delete掉。

所以 如果是用 int &a = func1();

a指到的會是個被delete掉的非法區域


而int &func2()使用方式較不一樣

內容假設一樣為 return n;

差別在這次並不會產生暫時變數TP

所以執行 int &a = func2();

會直接變成

n -> a

迴傳的值會存在該行當中

此時,如果n為全域變數 或者 經由外部參照近來的值

則會合法存在

也就可以使出下列用法

例如: func2()=9l;

func2()在執行完後,會變成一個已經早已存在的全域值的位置

但如果n是func2()的內部變數

此實執行 func2()=9l;的話

91會被放到被delete掉的n的位置

變成非法給值
=================================================

以下是網路上找到的一個使用例子
=================================================

來源:http://zhidao.baidu.com/question/58852657.html?fr=qrl&fr2=query


by Keng-li.Lin

沒有留言:

張貼留言