p 2 二維陣列?

時間 2023-05-24 02:12:04

1樓:百好佳

這題有意思,首先 int a 3] =是乙個二維陣列,但是記憶體空間中這些資料的儲存是連續的。可以理解為 int a [5] =a儲存的都是陣列的首元素位址,區別在於以為一維陣列的下標代表的是位址,二維陣列下標代表的是行和列的個數。

int (*p)[3]; 這裡是用指標的形式 宣告乙個新的陣列,p = a; 這裡把a陣列的首元素位址賦給 指標陣列,此時新宣告的指標陣列就指向了a陣列,*p就等於a[0];

所以 (*p)[2]等價於a[2] =3;一維陣列下標為二的元素。

2樓:莊政警

c語言中,訪問資料時,"[操作符實際上就是讀取偏移位址內資料的操作符,比如a[b]就是讀取從記憶體a開始往後b個單位的記憶體的資料,也就是*(a+b),所以*(a+b)和a[b]就是一回事,是等價的。 現在看(*p)[2], p就是*(p+0),也就是p[0],那(*p)[2]自然就是p[0][2]了,p[0][2]就是3.

3樓:最大的寶寶

和*都有降維作用。如果p是二維指標(或陣列),則p[x]或*p降為一維,p[或**p降為指向元素。

所以題目中的(*p)降為一維陣列後,再[2]就是從一維陣列中取第2個元素3了。

最重要的是你得弄清楚p指向哪乙個一維陣列,以及做類似p+1或p[1]運算時,這個1的跨度有多大(是跨一行還是跨乙個元素?),這由當前「p所在的表示式」是幾維來決定的。

4樓:網友

首先a[3]=表示將1到6這六個數字按三個數進行分組,即每三個數字為一行形成乙個二維陣列:第0行是1,2,3;第1行是4,5,6.

因為p=a,則(*p)[2]相當於(*a)[2];

又因為a作為二維陣列的首位址(也就是a[0][0]的位址),則*(a+i)表示第乙個維度(即第i行)的首位址(即*(a+0)為第0行首位址a[0];*a+1)為第1行首位址a[1];依此類推)。然後,(*a+i))[j]即可表示第i行第j列元素的值。

綜上所述,(*p)[2]=(a)[2]=(a+0))[2]也就是第0行第2列的值,即3.

5樓:豆豆在路上吃飯

(*p)[2] 是求陣列下標為2的數值, (p)[0]就是1,(*p)[1]就是2,(*p)[3]就是3。

6樓:聽不清啊

因為(*p)的值就是a,所以,(*p)[2]就是a[2],其值就是3。

7樓:喜羊羊

*p是第乙個資料的位址,(*p)[0]指第一行第二個元素1,(*p)[1]是第一行第二個元素2,(*p)[2]是第一行第三個元素3。

這個陣列不是一維的嘛,p[3][2]要怎麼算

8樓:

p是個有4個元素的一維陣列沒錯,但這個陣列裡的每個元素都是乙個int *型指標。所以,p[3]就是下標為3的那個元素,它既然是個指標,那麼p[3][2]就是p[3]指向的那個陣列的下標為2的元素值。從for迴圈的結果可知那麼p[3][2]就從a[9](值是10)再向後數2個元素的位置的值,自然是12!

定義二維陣列4 4,二維陣列中的陣列元素都用鍵盤賦值。求出該二維陣列中主對角線的和C語言

include stdio.h include conio.h include stdlib.h main for i 0 i 4 i printf 此矩陣主對角線的和為 d n num include define m 4 int main int i,j,a m m sum 0 for i 0 ...

二維陣列行列互換,並存到另二維陣列中

具體演算法如下 include int main int i,j,a 2 3 b 3 2 printf array a n for i 0 i 1 i 處理a陣列中的一行中各元素 for j 0 j 2 j 處理a陣列中的某一列元素 printf 5d a i j b j i a i j print...

定義二維陣列

首先你要理解二維陣列的真正含義,它的第一維就是一組資料的起始位址,第二維就是某組資料中的某個值.其次,你要知道a 4 所表達的意思,是指二維陣列a的每一維都是由4個元素組成的一維陣列.而編譯器可以根據你賦給a的初值個數計算它的第一維長度 元素總個數 4,如果不能整除,則長度加1,此時還應該有幾個沒有...