return 在執行之前會創建一個臨時的變量,來保存要傳回的值,
返回值:返回一個副本值,原本的已被消除
返回指針:當返回的時候,原指針空間會被消除,如果沒有被其它程序使用,則是能正確返回,如果釋放後被其它程序使用,則會有可能修改掉此空間內的值,返回值會錯誤;
什麼樣的值除了函數仍然有效:
1.全局變量;
2.static變量;因為static相當於一個全局變量,不會被系統回收
例:
[cpp]
#inlcude<iostream.h>
int& sum(int,int);
int main(void){
int x = 5,y = 10;
printf("%d\n",sum(x,y));
return 0;
}
int& sum(int a,int b){
static int x;
x = a+b;
return x;
}
3.int* p = new int;
返回p的時候,會產生一個p的副本,本身已經無效了,但是p的副本裡www.2cto.com
存有它new出來的地址,所以是有效的。(對於地址沒有手動釋放是有效的
)
例:
[cpp]
int* small(int x,int y){
int* p = new int;
return p;
}
4.如果傳遞的是一個引用,而且返回的也是引用的話,則可以正確的返回,因為它是在函數外定義的。
[cpp]
#include<iostream>
int& max(int&,int&);
int main(){
int x = 15,y = 10;
printf("%d\n",max(x,y));
return 0;
}
int& max(int &a,int &b){
if(a>b)
return a;
else
return b;
}
5.如果傳遞的是變量,而且返回的也是變量,也可以正確返回。但是它創建一個副本返回時,如果不及時接收的話,會消失。
注意:永遠不要返回本地變量的指針和引用,會有錯誤;