看板 C_and_CPP 關於我們 聯絡資訊
最近研究指標,有點頭昏腦脹,想來請教一下。 一般變數的指標(*)與參考(&)間的關係比較好理解, 但是中間若又多了個函式來傳遞就很混亂, 曾看過下表: 傳遞方式 空間使用 執行效率 資料安全 語法容易 傳數值 劣 劣 優 優 傳指標 優 優 優 劣 傳參考 優 優 優 優 傳參考的語法容易? 請問下列6個 max 函式後我寫的註解是對的嗎? max5 與 max6 我想取得其最大值的位址該如何做呢? 這個max函式還有其他方式可以拼湊出不同的 * 及 & 的位置嗎? 多謝各位。 ///////////////////////////////////////////////////////////////// #include <iostream> using namespace std; int *max1( int *p, int *q) //傳指標 {return ( *p > *q ? p: q);} int *max2( int &p, int &q) //傳指標 {return ( p > q ? &p : &q);} int &max3( int *p , int *q) //與max2相反?傳參考? {return ( *p > *q ? *p : *q );} int &max4( int &p, int &q) //傳參考 {return ( p > q ? p : q );} int max5( int *p, int *q) //傳指標,與max3的差別是? {return ( *p > *q ? *p: *q);} int max6( int p , int q) //傳值 {return ( p > q ? p : q );} main() { int a=3; int b=5; cout << "&a=" << &a << endl; cout << "&b=" << &b << endl << endl; cout << "max1 = "<<*max1(&a,&b)<< " " << max1(&a,&b) << endl << endl; cout << "max2 = "<<*max2(a,b) << " " << max2(a,b) << endl << endl; cout << "max3 = "<< max3(&a,&b)<< " " << &max3(&a,&b) << endl << endl; cout << "max4 = "<< max4(a,b) << " " << &max4(a,b) << endl << endl; cout << "max5 = "<< max5(&a,&b)<< " " << endl << endl;//不能取max值的位值 cout << "max6 = "<< max6(a,b) << " " << endl << endl;//不能取max值的位值 system("pause"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.141.201
nowar100:1.指 2.參 3.指 4.參 5.指 6.值 09/02 17:03
nowar100:回傳: 1.指 2.指 3.參 4.參 5.值 6.值 09/02 17:05
loveme00835:還有接受 "參考", 回傳 "值" 的版本 09/02 17:07
Cidolfas:請教:回傳值不是要跟定義函式一樣嗎? 09/02 17:09
Cidolfas:有些不是 int& max,但是 return int 09/02 17:11
nowar100:妳不要被&給迷惑 它return int 然後用 int&去接 代表他 09/02 17:13
nowar100:是將那個東西 reference 方式傳回來 09/02 17:13
nowar100:其實很好分 要接的是int*就是指標 是int&就是參考 09/02 17:14
nowar100:int就是拷貝一份值 09/02 17:15
loveme00835:除了定義, 我都習慣把 * 跟 & 跟型態寫在一起, 像是 09/02 17:15
loveme00835:int& max( ... ); 09/02 17:16
Cidolfas:再請教:為何不能取 &max5 及 &max6?他們沒有位址嗎? 09/02 17:40
james732:5, 6 應該是回傳 Rvalue? 09/02 17:41
Cidolfas:另,我有點不清楚return值是看哪?max前,還是return那 09/02 17:56
Cidolfas:因為max3與max5只差在max前的定義,而回傳 3.參 5.值? 09/02 17:58
james732:return是看max之前 09/02 18:02
holymars:反正這麼短的函式都會被最佳化幹掉 所以沒差啦...lol 09/03 14:45
holymars:另外對基本型態來說 傳值的效率比傳ptr/ref好多了@@ 09/03 14:46