以c++指標、陣列、引用為主
總結:
值傳遞(1)傳遞引用給函式與傳遞指標的效果是一樣的。被調函式的形參就成為原來呼叫函式中的實參變數或物件的乙個別名來使用。
(2)使用引用傳遞函式的引數,在記憶體中並沒有產生實參的副本,它是直接對實參操作;而使用一般變數傳遞函式的引數(值傳遞),當發生函式呼叫時,需要給形參分配儲存單元,形參變數是實參變數的副本;如果傳遞的是物件,還將呼叫拷貝建構函式。因此,當引數傳遞的資料較大時,用引用比用一般變數傳遞引數的效率和所佔空間都好。
(3)使用指標作為函式的引數雖然也能達到與使用引用的效果,需要重複使用"*指標變數名"的形式進行運算,這很容易產生錯誤且程式的閱讀性較差;另一方面,在主調函式的呼叫點處,必須用變數的位址作為實參。而引用更容易使用,更清晰。
格式:型別識別符號 &函式名(形參列表及型別說明)
好處:在記憶體中不產生被返回值的副本;(注意:正是因為這點原因,所以返回乙個區域性變數的引用是不可取的。因為隨著該區域性變數生存期的結束,相應的引用也會失效
注意事項:
(1)不能返回區域性變數的引用。主要原因是區域性變數會在函式返回後被銷毀,因此被返回的引用就成為了"無所指"的引用,程式會進入未知狀態。
(2)不能返回函式內部new分配的記憶體的引用。雖然不存在區域性變數的被動銷毀問題,可返回函式內部new分配記憶體的引用,又面臨memory leak。例如被函式返回的引用只是作為乙個臨時變數出現,而沒有被賦予乙個實際的變數,那麼這個引用所指向的空間(由new分配)就無法釋放,造成memory leak。
(3)可以返回類成員的引用,但最好是const。如果其它物件可以獲得該屬性的非常量引用(或指標),那麼對該屬性的單純賦值就會破壞業務規則的完整性。
(4)流操作符過載返回值申明為「引用」的作用:在程式中,流操作符》和《經常連續使用。因此這兩個操作符的返回值應該是乙個仍舊支援這兩個操作符的流引用。其他的資料型別都無法做到這一點。注意:除了在賦值操作符和流操作符之外的其他的一些操作符中,如+、-、*、/等卻千萬不能返回引用。因為這四個操作符的物件都是右值,因此,它們必須構造乙個物件作為返回值
const離誰近誰的值不可更改
指標常量——指標型別的常量(int *const p)
int a =
10, b =20;
int*
const p =
&a;*p =30;
// p指向的位址是一定的,但其內容可以修改
常量指標——指向「常量」的指標(const int *p, int const *p)
int a =
10, b =20;
const
int*p =
&a; p =
&b;// 指標可以指向其他位址,但是內容不可以改變
int
(*fun)
(int a,
int b)
;int
add(
int a,
int b)
; fun=add;
//fun=&add;
//呼叫方法:
(*fun)(2
,3);
//fun(2,3);
int
*fun
(int a,
int b)
;//括號優先順序大於*
其實就是share_ptr和weak_ptr(見stl部落格專區) C 學習一 指標
摘要自 c 指標 菜鳥教程 runoob.com 指標也就是記憶體位址,指標變數是用來存放記憶體位址的變數。所有實際資料型別不管是整型 浮點型 字元型,還是其他的資料型別,對應指標的值的型別都是一樣的,都是乙個代表記憶體位址的長的十六進製制數。唯一不同的是指標所指向的變數或常量的資料型別不同。一 c...
指標與陣列(一) 指標認知
一 定義與初始化 1.如何理解指標?1 指標是變數。2 指標是乙個位址,指向的是個型別。3 指標指向的是位址,位址指向的是內容。4 指標的指標,是面對於指標的變數。5 指標型別的位元組長度由作業系統決定 32位作業系統為4位元組,64位作業系統為8位元組 2.定義指標的幾種規範 int p 重在表示...
c語言指標初探 一 指標與陣列
一 陣列名指標 c 編譯器將陣列名解釋為指標 include using namespace std int main cout sz 編譯器將陣列名解釋為陣列記憶體區域的首位址,對一維陣列來說要實現對某個元素的訪問,既可以用陣列名 下標的形式,也可以用間接引用 陣列名 偏移 陣列元素的指標形式 指...