指標陣列和陣列指標 和 指標和陣列的定義與宣告

2021-08-19 13:35:24 字數 2035 閱讀 7014

舉個栗子來區分以下指標陣列和陣列指標

int arr1[10]   是指標陣列,arr1和[ ]的結合性更高一些,所以arr1先與[ ]結合成為陣列,陣列有10個元素,每個元素的型別都為int 型,所以 int *arr1[10]是存放整型指標的陣列。

int ( * p)[10]   是陣列指標,p先與*結合,說明p是乙個指標變數,指向了乙個大小為10的整型陣列,所以p是乙個指標,指向了乙個陣列,叫陣列指標

陣列指標的使用

int arr[10] = ;

arr//表示陣列首元素的位址

&arr//表示陣列的位址   arr與&arr的值是相同的,但意義不一樣,再加一之後的值不相同

arr+1//跳過乙個元素

&arr+1//跳過整個陣列

陣列位址的儲存

int arr[10] = ;

int *p1 = &arr;//p1是整型指標,&arr取出的是陣列的位址,所以表達錯誤

int (*p2)[10] = &arr;//p2是陣列指標,存放陣列的位址是合適的

void print(int arr[3][4],int row,int col) //arr[3][4]也可寫成(*arr)[4]

{ int i = 0;

int j = 0;

for(i = 0;i < row;i++)

{for(j=0;jarr+i ~~在i=0時指向第0行

*(arr+i) ,解引用,找到這行對應的元素,這一行的陣列名相當於首元素位址

*(arr+i)+j這一行第j個位址

* ( *(arr+i)+j)表示第i行第j個元素,和arr[i][j]意義相同

指標和陣列的定義與宣告

首先說明,定義為指標就要宣告為指標,定義為陣列就要宣告為陣列

下面說說定義為陣列,宣告成了指標的情況,這種錯誤還是盡量要避免的

把陣列宣告成了指標的形式,語法上沒有檢測出問題,但是結果有錯,如下圖

具體分析:宣告成了指標的形式,指標只佔四個位元組,所以在定義的陣列中只傳來了四個位元組的內容,把abcd的ascii組成的四個位元組當成位址即ox64636261

而要輸出的是陣列的內容,首先要拿到」abcdef」中首字母a的位址

arr本來就是char*型別的,取出的a的位址就是char * 型別的,想要char 型別且是a的位址,對其進行強制型別轉換

綜上所述,就是講arr改為(char *)&arr

接下來討論一下定義為指標,宣告成陣列的情況

結果是隨機值

具體分析:在定義的指標中,p中存的是a的位址,p是4個位元組

在宣告的陣列中,最多有四個元素,printf中的p就是陣列名,表示首元素位址,p有四個元素

p中的四個元素就是將a的位址劃分為四個元素,所以輸出的p就是a的位址劃分的元素,為隨機值

還是要輸出」abcdef」的話,就要在printf後面p的位置上放a的位址。

整型指標解引用是四個位元組,所以a的位址就可以表示為* ( int )p ,再將其強制型別轉換成char 型,即就是所需要的位址型別

另一種改正方法:* (char**)p ,將p強制型別轉換成char* * ,再將其解引用剛好為四個位元組,也是char * 型別

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 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本身...