陣列指標,指標陣列,二維陣列之間的對比

2021-09-28 20:53:44 字數 1604 閱讀 6203

首先解釋幾個概念:

1.陣列指標,即指向陣列的指標。其本身是乙個指標變數,變數中儲存的值是乙個陣列的起始位址。

int (*p)[10];
畫圖畫圖:

這樣一種結構,變數中儲存的使陣列的開始位址。

所以,我們就可以像下面這樣寫

int a[10] = ;

// 陣列名就表示陣列的首位址,所以可以直接賦值

int (*p)[10] = a;

for(int i=0;i<5;i++)

從上面我們可以看出來,陣列指標與我們的二維陣列的結構是一樣,注意,這裡說的是結構一樣,陣列指標這個變數和陣列名還是有區別的。 

2.指標陣列,即乙個陣列,其中存放的是指標。

// 開了乙個指標陣列,陣列的容量為10

就是上面這個結構,這個結構與我們的一維陣列是一樣的,只不過我們的一維陣列中一般儲存的是值,但是這裡面儲存的是指標。 

從上面的記憶體結構我們可以看出,陣列指標的結構與我們的二維陣列是類似的。但是與指標陣列的結構是不一樣的。

下面是我的一些測試**:

#include #include int main()

; char *b[8] = ;

char (*d)[10] = ;

printf("%d\n",sizeof(box));

// 指標陣列能用sizeof得到大小,因為這個b變數不一般

// 他代表的是整個陣列,所以他用sizeof能測量出整個陣列的大小

// sizeof這是由編譯器處理的,不是執行時計算的,是編譯器編譯

// 的時候就會把這個值確定下來。不知道的可以去了解一下

printf("%d\n",sizeof(b));

// 陣列指標不能使用sizeof得到正確的大小,因為它本身只是乙個普通的指標,所以是4個位元組

printf("%d\n",sizeof(d));

for(int i=0;i<4;i++)

printf("\n");

for(int i=0;i<4;i++)

printf("\n");

for(int i=0;i<4;i++)

printf("\n");

fun(box);

printf("\n");

func(b);

return 0;

}void fun(char (*a)[10])

}void func(char *a[10])

}

其實這其中很多東西都是編譯器進行的處理,你乙個int型別變數加1,其結果看起來就是加1,但是我乙個int型別指標變數加1,其值加了4,這就是編譯器在其中做了手腳,編譯器中由符號表,他記錄你這個變數代表的型別,然後在你加1的時候根據型別進行加1操作,得到不同的加1效果。

指標陣列 陣列指標 二維陣列指標

指標陣列 如果乙個陣列中的所有元素儲存的都是指標,那麼我們就稱它為指標陣列。除了每個元素的資料型別不同,指標陣列和普通陣列在其他方面都是一樣的,下面是 乙個簡單的例子 include int main 也可以不指定長度,直接寫作 int parr 定義乙個指向指標陣列的指標 int parr arr...

二維陣列 指標陣列與陣列指標

一 首先我們從字面意思理解一下什麼是指標陣列什麼是陣列指標 1 指標陣列 本質是乙個陣列,陣列中的每乙個元素是乙個指標。2 陣列指標 本質是乙個指標,而指標指向乙個陣列。二 我們該怎麼區分指標陣列和陣列指標?1 總共有三種表示形式 int p 4 和int p 4 和int p 4 表面看起來是不是...

二維陣列相關(陣列指標 指標陣列)

一維陣列中,int a 5 變數名a就是陣列a首元素位址,是int 型別。a是整個陣列首位址,是指向有5個元素的陣列的指標。二維陣列中,變數名a就是0行起始位址,a 就有轉換到列的意思,就代表0行0列。陣列指標 是乙個指標,其指向的資料型別由乙個陣列構成 將陣列作為乙個陣列型別對待 如 int p ...