指標陣列和陣列指標

2022-08-23 11:18:16 字數 1874 閱讀 1110

指標陣列:首先它是乙個陣列,陣列的元素都是指標。它是「儲存指標的陣列」的簡稱。int *p1[10];

陣列指標:首先它是乙個指標,它指向乙個陣列。它是「指向陣列的指標」的簡稱。   int (*p2)[10];

這裡需要明白乙個符號之間的優先順序問題,關鍵在於p1、p2先和誰結合。

「」的優先順序比「*」要高。p1 先與「」結合,構成乙個陣列的定義,陣列名為 p1,int *修飾的是陣列的內容,即陣列的每個元素。那現在我們清楚,這是乙個陣列,其包含 10 個指向 int 型別資料的指標,即指標陣列。

至於 p2 就更好理解了,在這裡「()」的優先順序比「」高,「*」號和 p2 構成乙個指標的定義,指標變數名為 p2,int 修飾的是陣列的內容,即陣列的每個元素。陣列在這裡並沒有名字,是個匿名陣列。那現在我們清楚 p2 是乙個指標,它指向乙個包含 10 個 int 型別資料的陣列,即陣列指標。

我們可以借助下面的圖加深理解:

上述摘自:《c語言深度解剖》

關於指標陣列和陣列指標的**:

#include using namespace std;

int main()

; int b[2][3] = , };

p1[0] = &a[0];//int *

p1[1] = &a[1];//int *

p1[2] = a + 2;//int *

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

cout << *p1[i] << " ";

//output:1 2 3

p2 = &a; //int (*)[3]

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

cout << (*p2)[i] << " ";

//output:1 2 3

p2 = &b[1]; //int (*)[3]

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

cout << (*p2)[i] << " ";

//output:4 5 6

}

明確兩點1. int a[3] = ;

a是陣列的首元素的首位址,具體地說是乙個具有3個整型變數的陣列的名字,而&a是整個陣列的首位址,其值相同但意義不同。

編譯器根據我們提供的型別和陣列大小,為我們分配了適當大小的儲存區域,並且把這塊儲存區域叫做a。請注意 :&a,它的型別是「指向具有 3 個整型變數陣列的指標「,簡而言之&a是乙個陣列指標。

2. &a+1

式子&a+1表示的是指標加法運算,而不是普通的數值加法運算,之所以會這樣是因為&a是乙個指標而非普通數值(雖然它本質上也是乙個整數)。假如此時&a=0xffff5700,那麼&a+1是多少呢?答案是:取決於&a的型別 。

a) 如果&a是乙個指向char型的指標,那麼&a+1 = 0xffff5701

b) 如果&a是乙個指向short型的指標,那麼&a+1 = 0xffff5702

c) 如果&a是乙個指向int型的指標,那麼&a+1 = 0xffff5704 (32位機器)

d) 如果&a是乙個指向某種結構體struct foo的指標,那麼&a+1 = 0xffff5700+sizeof(struct foo)

……指標加1不是指標內容簡單地加1,而是讓指標指向下乙個資料,這個資料的型別就是指標指向的型別,所以指標的加法究竟會讓這個指標指向**,取決於這個指標指向的資料型別。

因此,綜上所述,當&a與整數1做加法時,實際上是指標的加法,加1的含義是:令指標a指向下乙個資料 ,下乙個資料是啥?當然是緊挨著的下乙個具有3個整型變數的陣列了(因為&a的型別是指向具有3個整型變數的陣列的指標)。

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...

指標陣列和陣列指標

該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...