陣列指標與指標陣列

2021-06-09 02:03:42 字數 1353 閱讀 3324

陣列指標

為什麼在有些時候我們需要定義指向陣列而不是指向陣列元素的指標?如何定義?

答案與分析:

使用指標,目的是用來儲存某個元素的位址,從而來利用指標獨有的優點,那麼在元素需要是陣列的情況下,就理所當然要用到指向陣列的指標,比如在高維需要動態生成情況下的多維陣列。

定義例子如下: int (*pelement)[2]。

下面是乙個例子:

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

int (*pa)[3]; //定義乙個指向陣列的指標

pa = &array[0]; // '&'符號能夠體現pa的含義,表示是指向陣列的指標

printf ("%d", (*pa)[0]); //將列印array[0][0],即1

pa++; // 猜一猜,它指向誰?array[1]?對了!

printf ("%d", (*pa)[0]); // 將列印array[1][0],即4

上述這個例子充分說明了陣列指標—一種指向整個陣列的指標的定義和使用。

需要說明的是,按照我們在第四篇討論過的,指標的步進是參照其所指物件的大小的,因此,pa++將整個向後移動乙個陣列的尺寸,而不是僅僅向後移動乙個陣列元素的尺寸。

指標陣列

有如下定義:

struct ut_test_struct *pto[2][max_num];

請分析這個定義的意義,並嘗試說明這樣的定義可能有哪些好處?

答案與分析:

前面我們談了陣列指標,現在又提到了指標陣列,兩者形式很相似,那麼,如何區分兩者的定義呢?分析如下:

陣列指標是:指向陣列的指標,比如 int (*pa)[5]。

指標陣列是:指標構成的陣列,比如int *pa[5]。

至於上述指標陣列的好處,大致有如下兩個很普遍的原因:

a)、各個指標內容可以按需要動態生成,避免了空間浪費。

b)、各個指標呈陣列形式排列,索引起來非常方便。

在實際程式設計中,選擇使用指標陣列大多都是想要獲得如上兩個好處。

**:#include

int _inc(int i)                 // 用了陣列指標   加1操作

int main()

{int r =1;

int *w = &r;

w[0] = 7;

printf("%d\n", w[0]);

char c[2];

c[0] = 'a';

c[1] = 'b';

char (* a)[2] = &c;

printf("%d\n", _inc(2147483646));

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