陣列指標和指標陣列的區別,c語言中的指標陣列和陣列指標的區別

2021-03-03 20:48:17 字數 4129 閱讀 3586

1樓:育知同創教育

int a[3][4]這個bai無需多說,就du是乙個二zhi維陣列。

int (*p)[4]就相當於daoint p[4],它就是乙個二維陣列的指標,可以

專指向乙個第屬二維度為4的二維陣列。而a就是這樣的陣列,因而下面是合法的。

p=a;

int *p[3]是指標陣列。說白了,就是定義了三個指標,分別為p[0],p[1],p[2]。可以將他們單獨拿來使用。

int a1,a2,a3;

p[0]=&a1;

p[1]=&a2;

p[2]=&a3;

陣列指標和指標陣列的區別

2樓:匿名使用者

陣列指標(也稱行指標)

定義 int (*p)[n];

()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。

如要將二維陣列賦給一指標,應這樣賦值:

int a[3][4];

int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。

p=a; //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]

p++; //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]

所以陣列指標也稱指向一維陣列的指標,亦稱行指標。

指標陣列

定義 int *p[n];

優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1時,則p指向下乙個陣列元素,這

樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指標變數可以用來存放變數地

址。但可以這樣 *p=a; 這裡*p表示指標陣列第乙個元素的值,a的首位址的值。

如要將二維陣列賦給一指標陣列:

int *p[3];

int a[3][4];

p++; //該語句表示p陣列指向下乙個陣列元素。注:此陣列每乙個元素都是乙個指標

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

p[i]=a[i]

這裡int *p[3] 表示乙個一維陣列內存放著三個指標變數,分別是p[0]、p[1]、p[2]

所以要分別賦值。

這樣兩者的區別就豁然開朗了,陣列指標只是乙個指標變數,似乎是c語言裡專門用來指向二維陣列的,它占有記憶體中乙個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,占有多個指標的儲存空間。

還需要說明的一點就是,同時用來指向二維陣列時,其引用和用陣列名引用都是一樣的。

比如要表示陣列中i行j列乙個元素:

*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]

優先順序:()>>*

3樓:千鋒教育

指標陣列:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標。

陣列指標:a pointer to an array,即指向陣列的指標。

還要注意的是用法的區別,下面舉例說明。

int* a[4] 指標陣列

表示:陣列a中的元素都為int型指標

元素表示:*a[i] *(a[i])是一樣的,因為優先順序高於*int (*a)[4] 陣列指標

表示:指向陣列a的指標

元素表示:(*a)[i]

注意:在實際應用中,對於指標陣列,經常這樣使用:

typedef int* pint;

pint a[4];

這跟上面指標陣列定義所表達的意思是一樣的,只不過採取了型別變換。

**演示如下:

#include

using namespace std;

int main()

;int *a[4]; //指標陣列

int (*b)[4]; //陣列指標

b=&c;

//將陣列c中元素賦給陣列a

for(int i=0;i<4;i++)

//輸出看下結果

cout<<*a[1]<

}注意:定義了陣列指標,該指標指向這個陣列的首位址,必須給指標指定乙個位址,容易犯的錯得就是,不給b位址,直接用(*b)[i]=c[i]給陣列b中元素賦值,這時陣列指標不知道指向**,除錯時可能沒錯,但執行時肯定出現問題,使用指標時要注意這個問題。但為什麼a就不用給他位址呢,a的元素是指標,實際上for迴圈內已經給陣列a中元素指定位址了。

但若在for迴圈內寫*a[i]=c[i],這同樣會出問題。總之一句話,定義了指標一定要知道指標指向**,不然要悲劇。

4樓:e時代幽默網

陣列指標,就是乙個指向陣列首元素的指標,或者說是指向乙個陣列起始記憶體位址的指標。

指標陣列,就是乙個陣列中的所有元素型別均為指標,也就是說是乙個專門用來存放一堆指標的陣列。

c語言中的指標陣列和陣列指標的區別

5樓:黑丶雨

指標陣列:陣列裡的每乙個元素都是指標如*p[10],裡面的 p[0] 到 p[9] 都是指標;

可參考:http://baike.

陣列指標:指向乙個陣列的指標,如 arr[10] 是乙個陣列, 讓乙個指標指向這個陣列 p = arr;

訪問時通過 *(p + n) 或 p[n] 訪問元素值,n為元素索引值;

可參考:http://baike.

6樓:育知同創教育

int (*p)[4]; // 定義乙個陣列指標,指向含4個元素的一維陣列,陣列元素是int型別。

int *p[4]; // 定義乙個指標陣列,陣列中每個元素是乙個指標,指標指向**就要根據程式來定了。

判斷陣列指標與指標陣列主要通過運算子的優先順序來判斷。

int (*p)[4]; // 由於( )的優先順序高,說明p是乙個指標,指向乙個一維陣列的指標

int *p[4]; // 由於[ ]的優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列

c 語言指標的指標和二維陣列的區別?

7樓:文帝寶寶

指標的指標和二維陣列完全倆東西,二維陣列是 一維陣列的一維陣列,元素是陣列,所以可以隱式轉化為int (*)[3],跟int **兩回事,擴充套件到更多維或其它型別也是成立的,只能隱式轉化為第一維的元素的指標

補充說明下隱式轉化為指標,簡單說就是這樣(t是任意型別)

設有乙個陣列t a[10];

a的型別是「t [10]」,在做大多數運算的時候,都先隱式轉化為「t *」型別,即t的指標

對於多維陣列,可以看做是乙個一維陣列,陣列的元素型別就是第二維開始的陣列型別,比如:

t a[10][20][30];

是乙個有10個型別為「t [20][30]」元素的陣列,用**解釋更清晰:

typedef t u[20][30];

u a[10];

跟上面的定義等價,所以a只能隱式轉化為「u *」,「u *」後也就是「t (*)[20][30]」這個型別了,跟多級指標沒關係,因此,多維陣列不存在到多級指標的轉化規則,強轉只會導致問題

8樓:育知同創教育

二維陣列由若干個一維陣列組成在c語言中定義的二維陣列實際上是乙個一維陣列,這個一維陣列的每乙個成員又是乙個一維陣列。

當變數作為函式的引數時,函式內修改的是形參,實參不變化;(swap(int a, int b))

當指標作為函式的引數時,函式內:若修改指標變數,實參指標指向變數不變。若修改指標指向,實參指標指向的變數變化。(swap(int *a, int *b))

c語言中的指標陣列和陣列指標的區別

指標陣列 陣列裡的每乙個元素都是指標如 p 10 裡面的 p 0 到 p 9 都是指標 可參考 http baike.陣列指標 指向乙個陣列的指標,如 arr 10 是乙個陣列,讓乙個指標指向這個陣列 p arr 訪問時通過 p n 或 p n 訪問元素值,n為元素索引值 可參考 http baik...

c語言陣列越界,C語言陣列(指標)越界訪問

第乙個和第二個陣列a 2 按指標說就是指向a 1 也就是30的記憶體下乙個位置,兩種程式排列不一樣,第二個下乙個應該是i的位置,第乙個不一定,可能是堆裡面的隨機數。恩。打個比方說有一天你去賓館訂了個房間。然後再牆壁上鑿了個洞看隔壁住著誰。後來又有一天你又去訂了乙個房間,然後又在牆壁上鑿了個洞看隔壁住...

ios中陣列和指標的區別,陣列和指標的區別

1 陣列可以申請在棧區和資料區 指標可以指向任意型別的記憶體塊 2 sizeof作用於陣列時,得到的是陣列所佔的記憶體大小 作用於指標時,得到的都是4個位元組的大小 3 陣列名表示陣列首位址,值不可以改變,如不可以將 作用於陣列名上 普通指標的值可以改變,如可將 作用於指標上 4 用字串初始化字元陣...