指標的定義和使用

2021-07-15 08:54:44 字數 1434 閱讀 6351

1.指標是變數,但是指標的位元組長度是固定的。因為指標儲存的是位址,由作業系統的位數決定,32位機的位元組是4,64位機的位元組是8。

2.指標指向的記憶體空間對應的記憶體空間

我在這裡定義了乙個整型指標p儲存num的位址(0x1000),num的位址就是首位元組的位址,而指標p本身的位址為0x2000。下面我們來引入指標的定義:

num對應的記憶體空間為5,指標p對應的記憶體空間為0x1000,指標指向的記憶體空間為5。

num++:對num對應的記憶體空間加1。    5 --> 6

p++:對p對應的記憶體空間加1。(步長)  0x1000  -->  0x1004

(*p)++:對p指向的記憶體空間加1。

其中*p是根據p對應的記憶體空間找到其對應的記憶體空間。 5 --> 6

等式:p == &num

*p == num  == *(&num)

下面我們再舉乙個例子來進一步說明,如下圖所示

在這裡定義了乙個二級指標pp儲存指標p的位址(0x2000),而指標pp本身的位址為0x3000。

pp對應的記憶體空間為0x3000,pp指向的記憶體空間為0x2000。

等式:num == *p == **pp == *(&num)

p == &pp

3.指標的運算

a.指標 +/- 整數 = 指標所對應的記憶體空間與它所指向的型別乘以整數相加減。eg. p++  --> p = p + 1

b.指標 - 指標 = 兩個指標相差的資料個數。

c.指標的比較:

如果兩個指標變數指向同乙個陣列的元素,那麼指向前面元素的指標變數小於指向後面元素的指標變數。

d.指標加指標沒有實際意義。

4.萬能指標(void *)

void * 可以表示任意一種型別的指標。我們知道相同指標型別之間才能進行賦值,下面我將舉出乙個例子來進行說明

#include int main()

main.c: 在函式 『main』 中:

main.c:15: 警告:從不相容的指標型別初始化

我們可以看到不同指標型別之間會出現不相容。使用void * 的時候不會出現警告,但是void * 只能接收,不能取值,一旦取值就會出現段錯誤。

5.指標的使用

當我們給指標賦值的時候,我們要注意指標是否分配了合理的記憶體。如果指標的位址為空,那麼就要在堆上用malloc給它分配空間,這樣可以避免野指標的出現!

c語言指標定義和使用

資料記憶體中的位址也稱為指標,如果乙個變數儲存了乙份資料的指標,我們就稱它為指標變數。定義指標變數 定義指標變數與定義普通變數非常相似,不過要在變數名前加星號 格式為 datatype name 或者dataype name value 表示乙個指標變數,datatype表示該指標變數所指向的資料的...

定義和使用指向函式的指標變數

練習03 18 02 輸入兩個整數,然後讓使用者選擇1或2,選1時呼叫max函式,輸出兩者中的大數,選2時呼叫min函式,輸出兩者中的小數。輸出樣例 input two integer numbers a 34 b 65 please choose 1 or 2 2 a 34 b 65 min 34...

善用指標 指標定義與使用

1.在定義指標變數時必須指定基型別 因為不同的型別在計算機中占用的位元組數,儲存方式都是不一樣的。例如 使指標移動乙個位置,或使指標值加1,這個1代表什麼呢?如果指標是指向乙個整型變數的,那麼 使指標移動乙個位置 意味著移動4位元組 使指標加1 意味著使位址值加4個位元組。如果使用的是乙個雙精度型的...