1、函數指針引用的定義如下:
type (* &pFunc)(type,type) ( func);
2、看一段實例
int (*add)(int ,int);
int (*&pFunc)(int ,int)(add);
這個實例將pFunc引用指向add函數,我們知道引用一經綁定,便不能將其綁定到其他的對象,但是我們可以通過引用來修改其所綁定的對象。
3、分析下面這個簡單的程序之後,應該都能明白個大概了吧
<pre name="code" class="cpp">#include <iostream>
using namespace std;
int Add(const int& a ,const int& b)
{
return a+b;
}
int Redu(const int &a,const int& b)
{
return a-b;
}
void Change(int (* &refFunc)(const int& ,const int & ))
{
refFunc = Redu;
}
int main()
{
int (*p)(const int& ,const int& )(Add);//括號用於初始化函數指針
cout<<p(2,3)<<endl; //結果會輸出5;
Change(p);
cout<<p(2,3)<<endl;//最終會輸出-1
return 0;
}
程序運行的結果如圖所示:
程序中首先將函數指針p初始化爲Add函數,然後通過change()函數,函數的形參爲引用,然後在函數內部將修改引用的值,此時也就是修改了P的值,使得p指向了
Redu函數。
這個程序並不難,主要是理解函數指針和引用。
4、引用和指針的聯繫和區別。
通過前面的學習,我們知道我們可以通過指針或是引用間接的來訪問或是操作其他的對象。指針(Pointers)是通過" * "和“ -> ”操作符,而reference 則是通過.操作符。
引用的也是通過指針來實現的,其具體的原理這裏不再深究。我們所要做的就是了解何時使用引用,何時使用指針。
1)、我們知道沒有所謂的空引用,即null reference,但是 指針可以爲NULL。所以如果我們需要一個變量來指向某個對象,但是這個對象也有可能爲空,此時我們應該使 用的是指針。換句話說,如果某個變量總是代表某個對象,同時這個對象一定不會爲NULL,那麼我們所使用的一定是引用。
2)、pointers可以被重新賦值,指向另外一個對象,但是reference卻總是指向它最初獲得的那個對象。
string s1("today");
string s2("beautiful");
string &rs = s1; //rs代表s1
string *ps = &s1; //ps代表s1
rs = s2; //rs代表s1,此時s1 = "beautiful"
ps = &s2; //ps代表s2
所以我們可以這樣概括一下:當你知道你需要將某個變量指向某個對象時,而且絕不會將其指向其他東西,或是當你實現一個操作符而其語法需求無法由pointers完成,那麼我們就應該選用referencs.。