指標陣列:陣列元素全部都是指標的陣列(本質為陣列)
tips:整型陣列,這個名詞很耳熟吧?那指標陣列什麼意思不言而喻。
【例】一維指標陣列的定義:
int * ptr_array[10];
的優先順序比*的優先順序高, ptr_array 先與結合,形成陣列 ptr_array[10],有10個元素的陣列,
再與 「*」 結合,表示此陣列是指標型別的,每個陣列元素相當於乙個指標變數。
【例】
#include
#include
int main();
for(i = 0 ; i < 6 ; i++ )
printf("\n");
for(i = 5 ; i >= 0 ; i-- )
printf("\n");
return
0;}
tips:
二維陣列與指標陣列
二維陣列如 char string_1 [10][10] 只要定義了乙個二維陣列,無論賦值與否,系統都會給其分配相應的空間,而且該空間一定是連續的。
指標陣列如 char * str_b[5] 系統至少會分配5個連續的空間用來儲存5個元素,表示str_b[5]是乙個5個元素的陣列,每個元素是乙個指向字元型資料的乙個指標。
【例】二維陣列與指標陣列記憶體分配例項
char a[3][8]=;
char *n[3]=;
注意:系統給a分配的空間都是連續的,而給n分配的空間則不一定連續。
【例】
#include
#include
int main();
int (*p)[3];
/*p是乙個指標,這個指標指向乙個記憶體單元,這個記憶體單元中存放的內容是陣列的位址。
現在有陣列a,我們要得到陣列a的位址,也就是&a,然後陣列a的位址送給p。
*/p = &a;
/*由於p是乙個指標,所以要*p得到指標指向的記憶體單元的數值,這個數值就是陣列a的位址。
*/printf("%d\n",(*p)[0]);
return
0;}
【例】
#include
#include
int main();
/*p首先是乙個指標,指向什麼呢?指向乙個長度為3的陣列。*/
/* 規律:可以從優先順序結合的方式可以看出來。
首先p結合了*,說明是乙個指標
然後結合了[3],說明指向的是乙個陣列
*/char (*p)[3];
int i;
p = c;
printf("sizeof(c) is : %d\n",sizeof(c));
for(i = 0 ; i <= 5 ; i++ )
printf("\n");
for(i = 5 ; i >= 0 ; i-- )
return
0;}
char (*p)[3];
模擬我們平時使用到的:
char arr[3];
實際上*p == arr,arr是陣列的首位址,那麼*p的值就是陣列首位址的值,以此類推,不難理解。或者如上注釋中寫道:p首先和*結合,說明p是乙個指標,然後和結合,說明是乙個指標指向乙個陣列,也就是陣列指標。
tips:
二維陣列指標:
#include
#include
int main(),,,
,} ;
/*p是乙個陣列指標,指向包含5個int元素的一維陣列,此時p的增量以它所指向的一位陣列長度為單位*/
/*p實際上指向了乙個一維指標陣列,也就是arr[4]*/
int (*p)[5] = arr;
/*arr[4][5]可以這麼去理解:
arr本身是乙個一位陣列,並且實際上arr[4]是乙個指標陣列,arr陣列中的4個元素都儲存的是乙個指標,
這些個指標指向的是長度為5的一維int型陣列。
*/for(i = 0 ; i < 4 ; i++ )
printf("\n");
}/*p+1是指行上面的增1
*/ /*
*(p+i)是指二維陣列arr[i][0]的位址。實際上並不完全一樣,
只是在數值上(p+i)和&arr[i][0]都一樣罷了。
*(p+2)+3表示a[2][3]位址(第一行為0行,第一列為0列),*(
*(p+2)+3)表示a[2][3]的值。
*/printf("%d\n",*(
*(p+1) + 2));
/*指的是arr[0][0],可以吧(*p)[0]看成是(*(p+0))[0]*/
printf("%d\n",(*p)[8]);
/*指的是arr[0][8],實際上沒有arr[0][8],但是由於以上陣列記憶體單元分配是「連續」的,
所以實際上找完0行的5個元素會到1行去找,於是有了結果。
*/printf("%d\n",(*p)[8]);
return
0;}
指標與陣列,指標陣列 陣列指標
int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...
陣列 指標陣列與陣列指標
一 陣列型別 int a 10 printf a d,a 1 d n a,a 1 printf a d,a 1 d n a,a 1 輸出結果 2 陣列元素的首位址是常量,不能修改,這是為了釋放記憶體空間所必需的,否則找不到釋放記憶體空間的首位址了 3 定義乙個陣列型別 定義陣列型別的格式如下 typ...
指標陣列與陣列指標
1.指標陣列 指標陣列中每乙個元素都是乙個指標,也既是存放字串的首位址。所以指標陣列適合處理若干個長度不等的字串。定義的一般形式為 型別說明符 指標陣列名 陣列長度 例如 int p 3 宣告乙個陣列,指標陣列p,由3個int型別指標變數元素組成 從運算子的優先順序分析,由於 的優先順序大於 所以p...