指標和陣列

2021-08-01 05:37:01 字數 1537 閱讀 9692

為了下面更好的分辨指標陣列混合概念,我們首先辨析一下什麼是指標,什麼是陣列

指標:

int *p;

這段**在記憶體上開闢出四個位元組的空間,然後把這四個位元組大小的空間命名為p,同時限定這四個位元組的空間只能儲存某個記憶體的位址,即使存入別的任何資料,都會被當作位址來處理,且限定存int型別的資料,為了更好的理解這個概念我們圖示來解釋一下

指標p指向位址為0x000012ff的記憶體

陣列

int a[5];

定義了乙個陣列,其中包含五個int型別的資料

陣列示意圖

指標陣列和陣列指標

指標陣列:其實我們可以叫做指標的陣列,通過漢語語法分析,我們知道「指標的」是修飾陣列的,所以說指標陣列本身是乙個陣列,其中存放的每個元素型別為指標型別,

陣列指標:其實我們可以叫做陣列的指標,同樣的我們知道它首先是乙個指標,它指向的是乙個陣列。

int *p1[10];

int (*p2)[10];

上面這兩個都定義包含了陣列指標和指標陣列的定義,那到底誰是誰呢?對於這個問題我們首先需要搞清楚""的優先順序比"*"高,

第乙個定義首先和方括號結合,當然是指標陣列,它代表陣列包含十個元素,其中每個元素的型別是int*;第二個由於"()"可以改變優先順序,所以它優先和"*"結合,所以它是陣列指標,它代表指標指向乙個有十個元素,其中每個元素都是int型別的陣列。

函式指標

有了之前的鋪墊,我們接下來給出函式指標的定義

void(*fun)(int,int)

它的含義是fun指向返回值為空,引數有兩個且型別均是int型別的函式,

int add(int a,int b)

int main()

函式指標陣列

定義void(*fun[n])(int,int) 

優先順序高,與fun結合,首先它是乙個陣列,陣列內存放了n個函式指標。比如說有時候我們如果需要在乙個迴圈中,每次呼叫不同的函式(這些函式的返回值和引數相同,函式名不同,實現不同),那麼就可以使用函式指標陣列來使**更加簡練和易讀。、

函式指標陣列

定義 void ( * (*fun)[3])(int,int); 

這個指標指向乙個包含了3 個元素的陣列;這個陣列裡面存的是指向函式的指標;這些指標指向一些返回值型別為void的指標、引數為整形的函式。 

其實也好理解,這裡的函式指標陣列指標不就是乙個指標嘛。只不過這個指標指向乙個陣列,這個陣列裡面存的都是指向函式的指標,僅此而已。

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...

指標陣列和陣列指標

該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...