作者Cidolfas ()
看板C_and_CPP
標題[語法] 函式的的指標(*)與參考(&)
時間Thu Sep 2 17:02:11 2010
最近研究指標,有點頭昏腦脹,想來請教一下。
一般變數的指標(*)與參考(&)間的關係比較好理解,
但是中間若又多了個函式來傳遞就很混亂,
曾看過下表:
傳遞方式 空間使用 執行效率 資料安全 語法容易
傳數值 劣 劣 優 優
傳指標 優 優 優 劣
傳參考 優 優 優 優
傳參考的語法容易?
請問下列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