C語言再學習16 指標 陣列(一)

2021-09-26 20:08:08 字數 1221 閱讀 3415

前言:

*p;乙個「int *」型別的模子在記憶體上得到 4 個位元組的空間,然後把這個 4 個位元組大小的空間命名為 p,同時限定這 4 個位元組的空間裡面只能儲存某個記憶體位址,即使存入其他任何資料,都將被當作位址處理,而且這個記憶體位址開始的連續 4 個位元組上只能儲存某個 int 型別的資料。

理解:乙個基本的資料型別(包括結構體等自定義型別)加上 * 號就構成了乙個指標型別的模子。這個模子的大小是一定的,與 * 號前面的資料型別無關。在 32 位系統上,不管什麼型別的指標型別,大小都為 4 byte。

測試程式:

#include

intmain

(void

)

輸出 p 的值為:0x00000000。

初始化解釋:定義乙個指標變數 p,其指向的記憶體裡儲存的資料為 int 型別,在定義變數 p 的同時把 p 的值設定為 0x00000000,而不是把 *p 的值設定為0x00000000。 int *p = null ,*p 表示的:0x00000000——0x00000003 之間的值。

如下定義:

int

*ptr;

*ptr =

null

;

因為定義 *ptr 的時候,未進行初始化,其儲存的可能是乙個非法位址,而第二行給 *ptr 賦值 null,即給 ptr 指向的記憶體賦值為 null,但是由於指標 *ptr 可能是非法的,所以編譯過程中導致報錯。可以修改如下:

可知,*ptr = null 是對指標指向的內容賦值,而不是指標的初始化。

*ptr :取出指標指向的記憶體裡儲存的數值;

指標辨析。

#include

intmain

(void

)

C語言再學習19 指標 陣列(四)

1.1 指標陣列和陣列指標的記憶體布局 指標陣列 乙個陣列,陣列元素都是指標,陣列佔多少位元組由陣列本身決定。它是 儲存指標的陣列的簡稱。陣列指標 乙個指標,它指向乙個陣列。在 32 位系統下,指標永遠佔 4 個位元組,至於它指向的陣列佔多少位元組,我們並不知道。它是 指向陣列的指標的簡稱。指標陣列...

C語言再學習20 指標 陣列(五)

1.1 二維陣列 除了函式,陣列裡可以存放任何資料。char a 3 4 a 1 2 如下圖 實際上,記憶體是線性的,類似於尺子,最小單位為 byte 比如 記憶體位址 0x0000ff00 是指記憶體零位址開始偏移 0x0000ff00 個 byte。實際上二維陣列記憶體的存放如下圖 註解 1 a...

16 指標與一維陣列

指標在很多時候是與陣列緊密相關的,因為陣列元素的位址通常是連續的,這為指標的操作提供了方便。1 陣列元素的位址關係 一維陣列的名字實際上就是指向這個陣列的第乙個元素的指標,也就是這個陣列的起始位址。例如 int a 3 int p1 a int p2 a 0 a 既是陣列的名字,也是整個陣列 a 的...