指標
地址運算子:指標&
C語言中最重要的,也是最複雜的,概念之一就是指標,也是用來儲存地址的變數。
一般來說,當需要改變呼叫函式中的某個引數數值時,任何被呼叫的無返回值C函式都需要使用地址來完成這個任務。
一元運算子&可以取得變數的儲存地址,如pooh是一個變數名,則&pooh就是變數pooh的地址,可以看作變數pooh在記憶體中的儲存位置。
1.使用指標
/
int * ipointer;/
宣告int型別的指標變數ipointer/
ipointer = &i;/
指標變數ipointer的值為變數i的地址 */2.間接運算子: *
當後面跟著是一個指標變數或地址時,*給出儲存在地址裡的數值,如:
int var = 0;
int * varptr = &var;
int var2 = *varptr;
*varptr表示指標varptr地址儲存裡的數值,那麼變數var2的值等於變數var數值
3.指標操作
C提供了6種基本的指標操作。
3.1 賦值
可以把一個地址賦給指標。通常使用陣列名或地址運算子&來進行地址賦值。
3.2 求值
運算子*可取出指標指向地址中儲存的數值。
3.3 取指標地址
指標變數同其他變數一樣具有地址和數值,使用運算子&可以得到儲存指標本身的地址。
3.4 將一個整數加給指標
可以使用+運算子來把一個整數加給一個指標,或者把一個指標加給一個正數。兩種情況下,這個整數都會和指標所指型別的位元組相乘,然後所得的結果會加到初始地址上。
如果想加的結果超出了初始化所指向的陣列的範圍,那麼這個結果是不確定的,除非超出陣列最後一個元素的地址能夠確保是有效的。
3.5 增加指標的值
可以通過一般的加法或增量運算子來增加一個指標的值。對指向某陣列元素的指標做增量運算,可以讓指標指向該陣列的下一個元素。比如指標變數ptr指向陣列的第1個元素,進行ptr++操作,則ptr會指向陣列的第2個元素。
3.6 從指標中減去一個整數
可以使用-運算子來從一個指標中減去一個整數。指標必須是第一個運算元,或者是一個指向整數的指標。這個整數都會和指標所指型別的位元組數相乘,然後所得的結果會從初始地址中減掉,如果相減的結果超出了初始指標所指向的陣列的範圍,那麼這個結果是不確定的,除非超出陣列最後一個元素的地址能夠確保是有效的。
3.7 減小指標的值
指標當然也可以做減量運算。比如指標變數ptr指向陣列的第3個元素,進行ptr--操作,則ptr會指向陣列的第2個元素。
3.8 求差值
可以求出兩個指標間的差值。通常對分別指向同一個陣列內的兩個元素的指標求差值,以求出兩個元素之間的距離。比如指標變數ptr2指向陣列第3個元素,指標變數指向ptr0指向陣列的第1個元素,則ptr2 - ptr0的值是2,表示指標所指向物件之間的距離為2個int數值大小。
3.9 比較
可以使用關係運算符來比較兩個指標的值,前提是兩個指標具有相同的型別。