定義二維陣列a,請問a與a等價嗎

2021-03-03 21:54:43 字數 4143 閱讀 2695

1樓:痛不過錯愛

a是二維陣列的首地址,而a[0]同樣是二維陣列中第一行的首地址,是等價的。*(a+1)是第二行首個元素,a[1]是其地址,不等價。a[1]與a+1等價

2樓:月

單獨一個a就是指a[0]=a,*(a+1)=a[1],a+1=a[0]+1

定義了二維陣列a[3][4],那麼a+1,*(a+1),*a[1],*(a[0]+1)各代表什麼意思

3樓:匿名使用者

因為a是t[4]型別,所

以a[1]得到的是int型的值,對其取下標是非法的內。所以a[1][0]是一個非法的表示式。

咳咳以容下都是廢話。。怎麼跑題了。。。既然打出來就懶得刪了至於&a[1][0],編譯器解釋為&((a[1])[0]),同樣非法。

4樓:聽不清啊

定義了二維陣列a[3][4],那麼

a+1=*(a+1)=*a[1],表示a[1]的地址,即&a[[1]。

*(a[0]+1)表示a[0][1]

二維陣列a[3][3]中p=a,當++p後為什麼指向的是a[0][1]而不是a[1][0]呢,*p+1與*(p+1)的區別在哪

5樓:匿名使用者

a是一個二級源指標

指向一個指標陣列,為a[0],a[1],a[2]a[0],a[1],a[2]又分別是指標,指向他們的兒子......所以p=a;++p;

p本來指向a[0]後增一,指向a[1]

a[1]就是a[1][0];

6樓:匿名使用者

(*(p+i)+j) p+i求行下標自j是列bai下標*(dup[i]+j) p[i]是行下標,j是列下標;

*(*(p+i)+j) *(p+i)取行下標,再加j 取列zhi下標元dao素;

p+1 指向a[0][1]

p+3 指向a[1][0]

行優先,先走完第一行,後走第二行。

p+1是a[0][1]

p+3是 a[1][0]這是指標

然後 a的話就是指向第一行 a+1是指向第二行 a+2是指向第三行意思是說

p+1=a[0][1]

p+3=a[1][0]

然後賦值的話 p=a 相當於a[0][0]p=a+1 相當於 a[1][0]

p=a+2相當於 a[2][0]

7樓:無風無雲的海角

沒有啊!

++p後是

襲指向a[1][0];

*p+1是行指標變列指標後,列指標+1;

*(p+1)是行指標+1後變為列指標;

#include

int main()

;int (*p)[3];

p=a;

++p;

printf("%d\n",*(*p));

return 0;}

c語言二維陣列與指標,我想知道為什麼*(a+1).與顯示中的a+1,所給出的地址是一樣的,怎麼理解?

8樓:

a=&a[0];陣列名相當於指標,等於陣列首地址, 型別為 int(*)[3];

*a= a[0];陣列int a[2][3];二維陣列 a有兩個子陣列,a[0],a[1] ;

有2*3 =6個int型元素 a[0][0],a[0][1],a[0][2];a[1][0],a[1][1],a[0][2];

就是說定義一個陣列int a[2][3];同時定義了 1+2+6

共九個識別符號,6個整型變數,兩個三個整型元素的一維陣列a[0],a[1] 定義為

;一個二維陣列 a;一共定義了9個名字。

*(a+1)=*(&a[1])=a[1];

a+1=&a[0]+1 =&a[1];

由於並無單獨的儲存空間儲存 a[1] 這個指標(a[1][0]的地址),所以a[1]和&a[1] 除了型別不同外,實際內容是相同的,

&a[1]的型別為 int(*)[3];

a[1]的型別為 int [3]; 也就是int* ;

實際上a,a[0],&a[0][0] 甚至&a的值都是相同的,但是型別不同

a,&a[0];: int [2][3] ==>int (*)[3]; (const ??? int (const ????*)[3])

a[0]; :int [3]==>int *; (const??? )int *;

a[0][0]; : int;

9樓:匿名使用者

a是雙下標變數,相當於定義是int **a; a存放著這個二維陣列的首地址,由於是二維陣列,

a+1實際上是地址a+3*sizeof(int),(其中的3對應著定義int a[2][3];)也就是a[1][0]的首地址

所以*(a+1)還是一個指標,與&a[1][0]是一樣的,a+1是指標,運算結果與前者相同。

10樓:匿名使用者

二維陣列是兩層指標,這個你該明白

*(*(a+i)+j)這個是表示i行的第j個資料,注意啊,是兩個*要是不理解,記住套用即可

一個*是指標

所以ij都是指標

a+1是一個指標,表示第1行的首地址(c中陣列時從0開始計數的)在二維陣列中,

a,a[0],&a[0][0]這三個指標雖然都是a的首地址的值,但是在c中用起來是不一樣的

a表示二維陣列的首地址

a[0]表示第0行的首地址

&a[0][0]表示第0行的第0個元素的地址

11樓:未來需努力點綴

樓主你好

你這裡的a是陣列名

陣列名a是陣列a[2][3]的首地址 也就是a[0][0]的地址那麼a+1就是a[0][1]的地址 *(a+1)對應的就是a[0][1]

希望能幫助你哈

12樓:楊復興

×(a+1)是一個指向 指向(a+1)所以它和a+1的地址是一樣的

c語言定義了一個二維陣列a[5][3], 用迴圈實現a[0][0]+a[1][0]+a[2][0]+~~~a[5][0] ?如何實現??

13樓:匿名使用者

可以啊,for(j=0;j<3;j++) for(i=0;i<5;i++) n=n+a[i][j];每一列的就有了,2個for語句的位置換一下就可以在行和列之間轉換了!!!

14樓:匿名使用者

哥們,a[5][0]陣列越界了啊!最多能得到a[4][0]實現a[0][0]+a[1][0]+a[2][0]+~~~a[5][0]

float sum= 0;

for (int i=0; i<5;i++)sum += a[i][0];

cout<的也能實現

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

15樓:匿名使用者

//假設:int a[5][3];

//可以獲得指定的列ncol的累加和

int getarraysum(int a[5][3], unsigned int ncol)

}return nresult;}

c語言中,有一個二位陣列inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};請問a[0],*(a+0)和*(*(a+0))的區別?

16樓:匿名使用者

要明白這事先要弄清二維陣列的儲存問題

先說一維陣列,舉例a[3],陣列名稱a就是指標,就是這個陣列的起始地址。其中各元素的地址就是a, a+1,a+2. 它們的值分別是*a, *(a+1), *(a+2),也就是a[0],a[1],a[2].

二維陣列int a[3][4],陣列名稱a則是指標的指標,它指向指標陣列a[3],其中每一個元素又分別指向一個一維陣列,每個陣列包含了4個整數。

來自c語言基礎訓練...

怎麼定義二維動態陣列,怎麼定義一個二維動態陣列

兩種方案,樓主自選吧。定義一個m n的二維陣列 1st 指標陣列來實現 char arr char malloc m sizeof char for i 0 i m i arr i char malloc n sizeof char 2nd 一個指向一位陣列的指標來實現char arr n char...

二維陣列與指標,二維陣列a的「列指標」與「行指標」有什麼聯絡

int m 可以分步驟來理解 m意思是引用這個整型數,m代表指向這個整型數的指標,m代表指向 m的指標,也就是傳說中指向指標的指標 一般情況下形參為指標型別時,可以傳送陣列名作為實參,也即陣列的起始地址,二維陣列的可以看成是多個一維陣列組成的 用這種二維指標是不能操作這種二維陣列的,二維指標就是指標...

請問,什麼叫一維陣列和二維陣列呢

一維陣列 vector 多維陣列 matrix 現在有很多陣列的運算已經封裝,比如.vector,matrixmatrix何用?相信我們都學過矩陣。矩陣有何用?太多了舉一個例子 圖形影象處理時用到的,平移 旋轉 靠什麼?矩陣。作用太多了 運用陣列可以簡化程式,使程式更加高效,也為以後學習指標型別的陣...