指針和引用的差別: 1)不存在空引用 2)所有的引用都需要初始化 3)一個引用始終指向對他初始化的那個對象 數組作為參數的時候,會退化為指針。同樣的例子也發生在函數上。一個函數型參數會退化為一個函數指針。 由于數組形參中數組的邊界被忽略了,是以在聲明的時候最好将其忽略。然而如果函數期望接受一個指向一個元素序列的指針作為參數的時候,而不是接受單個的指針,那麼最好采用如下的申明:
另外如果數組的邊界的精确值非常的重要的話,那麼可以限制函數隻接受特定數量的元素的數組,我們在這種情況下可以考慮采用引用形參:
現在函數就隻能接受大小為12的整形數組了。
模闆将有助于代碼的泛化:
當然你也可以采用傳統的方法:
我們其實也可以将上面的結合起來:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcucTO2UDNyYTMxIDNyMDMyEDMy8CXzAjMxAjMvwFds9GauVGbs9mcvwVbvN2Xzd2bsJmbj9CXt92YuM3ZvxmYuNmLzV2Zh1Wavw1LcpDc0RHaiojIsJye.png)
對于多元數組作為形參而言,形參是一個指向數組的指針,比如我們可以采用:
void function(int (*arr)[20]); //一個指針,指向具有20個元素的的數組
可能下面的方式更加的清晰:
void function(int arr[][20]);
注意對于多元數組,下面的聲明是錯誤的:
int[3][3] arr1={0};
而應該采用下面的方式:
指向指針的指針
比如下面的代碼:
這個在c中是合理的,但是在c++中,我們更加習慣使用指向指針的引用。比如:
一個常見的誤解就是适用于指針的轉換同樣适用于指向指針的指針,但是事實并不是如此的,比下面的代碼:
涉及到const的時候,也有這方面的問題:
我們知道,将一個非常量的指針轉換為指向常量的指針是合法的,但是,請看代碼: