一、陣列指標(也稱行指標)
定義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 該語句是定義乙個陣列指標,指向...