指標陣列與陣列指標

2021-07-15 23:37:58 字數 2714 閱讀 8451

指標陣列:陣列元素全部都是指標的陣列(本質為陣列)

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...