陣列指標與指標陣列的區別

2021-06-17 15:55:28 字數 3080 閱讀 7096

一、陣列指標(也稱行指標)

定義int (*p)[n];

()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。

如要將二維陣列賦給一指標,應這樣賦值:

int a[3][4];

int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。

p=a;        //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]

p++;       //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]

所以陣列指標也稱指向一維陣列的指標,亦稱行指標。

二、指標陣列

定義int *p[n];

優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1是錯誤的,這樣賦值也是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指標變數可以用來存放變數位址。但可以這樣*p=a; 這裡*p表示指標陣列第乙個元素的值,a的首位址的值。

如要將二維陣列賦給一指標陣列:

int *p[3];

int a[3][4];

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

p[i]=a[i];

這裡int *p[3] 表示乙個一維陣列內存放著三個指標變數,分別是p[0]、p[1]、p[2]

所以要分別賦值。

這樣兩者的區別就豁然開朗了,陣列指標只是乙個指標變數,似乎是c語言裡專門用來指向二維陣列的,它占有記憶體中乙個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,占有多個指標的儲存空間。

還需要說明的一點就是,同時用來指向二維陣列時,其引用和用陣列名引用都是一樣的。

比如要表示陣列中i行j列乙個元素:

*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]

優先順序:

()>>*

對於指標陣列和陣列指標,單從字面上似乎很難分清它們是什麼,先來看看指標陣列和陣列指標各自的定義形式。

指標陣列的定義形式為:

指標陣列的定義形式為:

型別名 *陣列名[陣列長度]; 

如:

int *p[8]; 

陣列指標的定義形式為:

型別名 (*指標名)[陣列長度]; 

如:

int (*p)[8]; 

現在來分析上述兩種定義形式,通過「int *p[8];」這條定義語句可以定義乙個指標陣列。因為優先順序的關係,所以p先與結合,說明p是乙個陣列,然後再與*結合說明陣列p的元素是指向整型資料的指標。元素分別為p[0], p[1], p[2], ...,p[7],相當於定義了8個整型指標變數,用於存放位址單元,在此,p就是陣列元素為指標的陣列,本質為陣列。如果使用的定義方式為「int (*p)[8];」, p先與*號結合,形成乙個指標,該指標指向的是有8個整型元素陣列,p即為指向陣列首元素位址的指標,其本質為指標。介紹了指標陣列和陣列指標的含義,接下來,我們通過下面一段**來看看指標陣列和陣列指標如何訪問二維陣列。

#include void main(int argc,char *argv)  

; int (*p1)[4];

int *p2[4];

int i,j,k;

p1=arr;

printf("使用陣列指標的方式訪問二維陣列arr\n");

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

printf("\n");

} printf("\n使用指標陣列的方式訪問二維陣列arr\n");

for(k=0;k<4;k++)

p2[k]=arr[k];

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

printf("\n");

} return ;

}

執行結果:

使用陣列指標的方式訪問二維陣列arr  

arr[0][0]=0 arr[0][1]=1 arr[0][2]=2 arr[0][3]=3

arr[1][0]=4 arr[1][1]=5 arr[1][2]=6 arr[1][3]=7

arr[2][0]=8 arr[2][1]=9 arr[2][2]=10 arr[2][3]=11

arr[3][0]=12 arr[3][1]=13 arr[3][2]=14 arr[3][3]=15

使用指標陣列的方式訪問二維陣列arr

arr[0][0]=0 arr[0][1]=1 arr[0][2]=2 arr[0][3]=3

arr[1][0]=4 arr[1][1]=5 arr[1][2]=6 arr[1][3]=7

arr[2][0]=8 arr[2][1]=9 arr[2][2]=10 arr[2][3]=11

arr[3][0]=12 arr[3][1]=13 arr[3][2]=14 arr[3][3]=15

陣列指標與指標陣列區別

前提 陣列指標是指標 指標陣列是陣列 示例 int p1 5 和 int p1 5 前者為指標陣列 後者為陣列指標。涉及運算符號優先順序 陣列下標比取值運算子 的優先順序更高。自右向左結合。先結合陣列下標.先談指標陣列 int p1 5 指向整型資料的指標變數。0 1 2 3 4 int 結論 指標...

陣列指標與指標陣列的區別

一 陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,...

陣列指標與指標陣列的區別

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...