C++ Primer 指標,引用筆記
阿新 • • 發佈:2020-11-13
引用:&
` int ival = 1024;
int &refVal = ival;
int &refVal2 // ! 引用必須初始化!而且無法解綁!!!
int &refVal3 = refVal; // 正確! 這裡其實是繫結到ival 上
int i = refVal ; // 正確!!這裡i 被初始化為ival 的值
`
但是!引用本身不是一個物件,所以不能定義引用的引用
但是 型別不匹配是不行的!
‘
int & refVal4 = 10; // 不行!!!,因為引用必須繫結的是一個物件!! double dval = 3.14; int & refVa5l =dval; // 不行!!型別不匹配!
’
指標(pointer) 1 指標本身就是一個物件,允許對指標賦值和拷貝,而且在指標的生活週期內它可以先後指向不同的物件。 2 指標無需在定義時賦初值,(一旦沒有初始化,會將擁有一個不確定的值)
`
int *ip1 , *ip2;
double dp, *dp2;
int ival = 42;
int *p = &ival; // 指標存放某個地方的地址!獲取地址試用&取地址符
// 因為引用不是物件,沒有實際地址,所以不能定義指向引用的指標!!!
` 指標的值(即地址)應該是下列4種狀態之一: 1 指向一個物件 2 指向緊鄰物件所佔空間的下一個位置 3 空指標,意味著指標沒有指向任何物件 4 無效指標,也就是上述情況之外的其他值 `利用指標訪問物件: 如果指標指向了一個物件,則允許使用解引用符(*) 來訪問物件 int ival = 42; int *p =&ival; count<< *p ; // 輸出42 , p存放著變數ival 的地址,或者說p是指向ival 的指標 *p = 0; count<< *p ; // 為*p 賦值,實際上是為p所指的物件賦值
`
空指標(null pointer) : int *p1 = nullpter; //等價於int *p1 = 0 int *p2 = 0; // 初始化p2為字面常量 int *p3 = Null ; // 等價於int *p3 = 0 int ival = 1024; int *pi = 0; int *pi2 = &ival; == : 比較的是兩個指標的地址,如果為True 有三種情況 : 1 它們都為空 2 都指向同一個物件 3 都指向了同一個物件的下一地址。: (特殊情況, 一個指標指向了某物件,同時另外一個指標指向了另外物件的下一地址,此時也有可能出現兩個指標相同的情況,即指標相等) Void* 指標 是一種特殊的指標,可以用於存放任意物件的地址,一個*void 指標存放著一個地址,但是與其他不同的是,我們對這個地址到底是什麼型別並不瞭解 概括來說,我們以void 的視角來看記憶體空間也就僅僅是記憶體空間,沒辦法訪問記憶體空間的物件 我們更多的是拿它來跟別的指標來比較,所謂函式輸入,輸出,或者賦值給另外一個void* 指標