c語言中c11的意思c是二維陣列

2021-05-31 21:53:55 字數 6029 閱讀 7879

1樓:

從0起算,*(*(c+1)+1)是第1行的第1個元素的值。即若有陣列c[3][3]=,,};,則*(*(c+1)+1)=5,也就是c[1][1]的值。

2樓:理科女

你應該是沒把指標定義二維數

組的那一小節沒弄清楚

a[i]=*(p+i)

一個二維陣列可以看成是以一維陣列為元素構造成的一維陣列,二維陣列可以看成一維陣列,只不過該一維陣列的每個元素又是一個一維陣列。例如已經定義了一個陣列c[i]兩層含義:

「一維陣列c[i]的陣列元素,

又是一維陣列名, 等價 *(c + i)

c[0], c[0] + 1為列地址

c, c+1,c+i 為行地址

呵呵幫你解答也順便幫我弄懂了

3樓:龍貓呼呼

c[1][1]

二維陣列可以理解成是一個一維數,只是它的成員又是一個一維陣列的,*(c+1)表示它的序號為1的成員(當然是一個一維陣列)的頭指標,*(c+1)就相當於一個一維陣列,接下來就可以理解了。

4樓:匿名使用者

2第一個如果不滿足 直接執行printf此時c值不變

c+=1 相當於 c=c+1

另外,站長團上有產品**,便宜***

5樓:匿名使用者

首先要清楚這是一個值,然後在看這個值的位置——就是該二維陣列的第二行第二列的數

如果是*(c+1)+1 那表示的就是一個地址

6樓:匿名使用者

樓上都說對了,c[1][1]

(再答也沒意義了......)

7樓:

*(c+1) 等價於 c[1]

*(*(c+1)+1)等價於 c[1][1]

應該是這樣

c語言中的二維陣列裡a+1和*(a+1)為什麼都是地址

8樓:劉文正粉絲

二維陣列, int a[10][20];

a是一個指標的指標, 即二級指標.

一個指標加一個數, 當然還是指標(即a+1是指標)

取值一個二級指標, 是一級指標(即指標), 所以還是指標, 不過型別發生了變化.

a+1的型別為int *[10].

而*(a+1)的型別則為int *, 也就是平常的指標.

如果你學習二維陣列是用心, 你就會知道不存在二維陣列, 二維陣列其實是一個包含陣列的陣列, 即陣列的每一個元素還是一個陣列(這點有點像物件導向的思維).

所以a[0]就是取第一個元素值, 而第一個元素是陣列, 所以其值仍是一個指標.

答了這麼多, 一看問題, 發現是"地址".....地址和指標是一個東西.

9樓:zh呼嘯而過

例如a[5][10];

a + 1的值是第二行的首地址,

* (a + 1)得值也是第二行的首地址,但是a + 1不等於a[1],而* (a + 1)等於a[1]。

如果給a+1再加1,就是a+1+1,就是a+2,它的值是第三行的首地址

如果給*(a+1)再加1,就是*(a+1)+1,它的值是第二行的第二個地址

他們移動的區別:前者是縱向的,後者是橫向的。

指標型別的區別:兩者均存放為同一地址,但前者是指向一維陣列,後者是指向元素的。

實際就是前者每次跳動4*10個位元組,後者每次跳動4個位元組。

10樓:twinkleh丶

a+1應該是 (a+0)+1

這裡的a是二維陣列中的二級指標

陣列名為a[0]的一維陣列(表示行)

也是陣列名為a的一維陣列(表示列)

後面的1表示行陣列移動1行

0表示列的移動

所以是1行0列的地址

*(a+1)中a是二級指標

取值二級指標是一級指標

一級指標指向的一維陣列(二維陣列中的行)

一維陣列移動一位只能是向下移動也就是行,

所以就是 第一行的首地址 也就等於二維陣列中 第一行零列的地址

11樓:tlier丿殘刀

二維陣列又包含多個一維陣列 a指向第一個一維陣列的首地址就還是地址

c語言中的二維陣列裡a+1和*(a+1)為什麼相等?

12樓:匿名使用者

它們只是值相等,但型別不相等,不能說它們相等。

a+1是int **型別,指向的是陣列a的第二行的起始地址; *(a+1)是int *型,指向的是陣列a的第二行第一個元素的地址。

c語言中*(*(p+1)+2) 什麼意思?具體怎麼表示的? 20

13樓:一個青年

*(*(p+1)+2)為

二維陣列用指標表示的形式,相當於陣列元素num[1][2]

二維陣列本質上是以陣列作為陣列元素的陣列,即「陣列的陣列」,型別說明符 陣列名[常量表示式][常量表示式]。二維陣列又稱為矩陣,行列數相等的矩陣稱為方陣。

對稱矩陣a[i][j] = a[j][i],對角矩陣:n階方陣主對角線外都是零元素。

二維陣列a[m][n],這是一個m行,n列的二維陣列。設a[p][q]為a的第一個元素,即二維陣列的行下標從p到m+p,列下標從q到n+q,元素a[i][j]的地址計算方法如下:

按「行優先順序」儲存時,地址計算為:loc(a[i][j]) = loc(a[p][q]) + ((i − p) * n + (j − q)) * t

按「列優先順序」儲存時,地址計算為:loc(a[i][j]) = loc(a[p][q]) + ((j − q) * m + (i − p)) * t

存放該陣列至少需要的單元數為(m-p+1) * (n-q+1) * t 個位元組

擴充套件資料:

指向二維陣列的指標變數設二維陣列為a[m][n]

設有整型二維陣列a[3][4]如下:

1000 1001 1002 1003

1004 1005 1006 1007

1008 1009 1010 1011

設陣列a的首地址為1000,各下標變數的首地址及其值如上列出。

c語言允許把一個二維陣列分解為多個一維陣列來處理。因此陣列a可分解為三個一維陣列,即a[0],a[1],a[2]。每一個一維陣列又含有四個元素。

例如a[0]陣列,含有a[0][0],a[0][1],a[0][2],a[0][3]四個元素。

陣列及陣列元素的地址表示如下:a是二維陣列名,也是二維陣列0行的首地址,等於1000。a[0]是第一個一維陣列的陣列名和首地址,因此也為1000。

*(a+0)或*a是與a[0]等效的,它表示一維陣列a[0]0號元素的首地址。也為1000。&a[0][0]是二維陣列a的0行0列元素首地址,同樣是1000。

因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。

同理,a+1是二維陣列1行的首地址,等於1004。a[1]是第二個一維陣列的陣列名和首地址,因此也為1004。&a[1][0]是二維陣列a的1行0列元素地址,也是1004。

因此a+1,a[1],*(a+1),&a[1][0]是等同的。由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。

此外,&a[i]和a[i]也是等同的。因為在二維陣列中不能把&a[i]理解為元素a[i]的地址,不存在元素a[i]。

c語言規定,它是一種地址計算方法,表示陣列a第i行首地址。由此,我們得出:a[i],&a[i],*(a+i)和a+i也都是等同的。

另外,a[0]也可以看成是a[0]+0是一維陣列a[0]的0號元素的首地址,而a[0]+1則是a[0]的1號元素首地址,由此可得出a[i]+j則是一維陣列a[i]的j號元素首地址,它等於&a[i][j]。

由a[i]=*(a+i)得a[i]+j=*(a+i)+j,由於*(a+i)+j是二維陣列a的i行j列元素的首地址。該元素的值等於*(*(a+i)+j)。

14樓:匿名使用者

按優先順序一步一步的計算:

假設:int a[3]=, *p; p=a; 先定一個指標p指向a陣列首地址。

解析下含義:

最裡的的是*(p+1)表示,指向地址數值+1後內地址的值顯示出來是2,指標指向不變還是指向陣列首地址。也就是p+1是指向了a[1]的地址,p還是指向a[0]地址。可以安陣列計算表示為p[1].

更直接。

下一步(p[1]+2) 這個是是數值p[1]=2 的值 加上 2 = 4

.但是*(4)。也就是定義的地址為4上的值。 這種操作會報錯,所以假設不成立,p不是變數指標而是指標的指標

。重新假設int a[2][3]=,} **p; p=a; 同樣先定一個指標p指向a陣列首地址

**p: 是指標的指標;*p指向的是指標的地址。也就是a[0]的地址。a[0]對陣列a[2][3]也是指標。

同樣一步一步化解:*(p+1),也是指向地址下一個地址的值。因為p是指向二維陣列,下一個地址值,是a[1]的地址也就是第一排的首地址。同樣可以化成:p[1].

*(p[1]+2) ,就是把p[1]看成指標q,那同於*(q+2)便於理解。同樣花簡為q[2].指向第一排資料的第3個資料也就是,6.

因此*(*(p+1)+2)=p[1][2] 也就是陣列a中的6 ..

15樓:洛雨曦

舉例:int p[2][3];這是個二維陣列2行3列,而用指標形式*(*(p+1)+2)表示的是p[1][2]這個元素,即:*(p+1)指向的是第一行(p[1]),*(p+1)+2表示的是第一行第二列的地址,而*(*(p+1)+2)就是取第一行第二列的內容也就是p[1][2]這個元素

16樓:等待阿若

推薦你去c語言貼吧去提問,**有專業的人會告訴你真的,不適合在知道上問

17樓:匿名使用者

去查「指向指標的指標」

18樓:

以地址p+1的值,再加上2組成的地址裡面的值

好拗口啊,呵呵

*(a+1)[2] 在c語言中表示什麼意思,其中a 是一個二維陣列的陣列名,請解

19樓:

是下標為[3][0]的那個元素的值。因為的優先順序比*高,所以*(a+1)[2]被解釋為*((a+1)[2])——二維陣列a中,a是第0行的第0個元素的地址,a+1自然是第1行的第0個元素的地址,(a+1)[2]實際上就是再向後移兩行那一行的元素指標,可用*(a+1+2)=*(a+3)表示,所以是第3行的第0個元素的地址;那麼*(a+1)[2]實質上就是**(a+3),顯然,它是第3行第0個元素。比如有int a[4][4]=,,,},那麼*(a+1)[2]就是13。

行、列下標都從0起算。供參考!

c語言中的二維陣列a[a][j]可以表述為*(*(a+1)+j),但是我看不懂這個東西啊 求解釋啊

20樓:匿名使用者

這個表述是有問題的,*(*(a+1)+j)沒有規定首地址,*(a+1)已經表示a+1地址中的資料了,明顯與陣列概念不合。

a[a][j]裡面陣列名稱和一個維度的陣列的個數表示重疊了,所以我換一種方式來表示:a[y][x]。為了便於理解,假定y=3,x=2。

在陣列中的資料有y行,x列;也就是3行,2列。假定第一行資料為;第二行資料為;第三行的資料為,那麼陣列a在記憶體中的資料為從首地址開始的連續6個資料,。假定首地址為0x01,那麼a[0][0]的地址為0x01,對應資料「1」,該可以表示為((行數 + 0x01)+ 列數),該地址的資料可以表示為*((行數 + 0x01)+ 列數),這個表示形式,和題目中的比較接近。

以此類推,a[0][1]的地址為0x02,對應資料「2」;a[1][1]為第2行第2列,地址為0x04,對應資料0x04。

由此可以看出a[y][x]可以表示為*((x + &a) + y);&a為陣列a的首地址。

不知道這樣講您是否能夠理解。同時「c語言中的二維陣列a[a][j]可以表述為*(*(a+1)+j)」這個題設本身是錯誤的,不要被其誤導。

c語言中二維陣列行指標是什麼,C語言中二維陣列行指標是什麼

就是指向每一行的指標,比如說二維陣列a 2 3 a 0 代表的是二維陣列第零行的首地址相當於 a 0 0 a 1 代表的是二維陣列第一行的首地址相當於 a 1 0 a 0 1代表的是二維陣列第零行,第一列的地址相當於 a 0 1 行指標其實就是二級指標,也就是說它指向一個一維陣列,int a 2 3...

c語言二維陣列下標表示方法,C語言二維陣列下標表示方法

下標就是在裡的,他是重0開頭的。具體表示如下 int a 5 5代表a最後個陣列裡的元素個數 是初學者吧!要努力喲!int n float a n n 都是從0開始到n 1 c語言二維陣列下標的值怎麼算 陣列的下標是從0開始,由於陣列是連續儲存的,你可以想象用一個4x4的 來表達這個陣列,然後把fo...

c語言問題 c語言中二維陣列在記憶體中怎樣儲存

嚴格意義上說不存在copy二維bai陣列,只是陣列裡的每du個元素是一個一zhi維陣列,而記憶體是一段連續dao的空間,根據你申請一個變數的順序按地址從低到高排,所以二維陣列不可能像一個矩陣那樣在記憶體中排列,這就涉及到它是按行依次往下排,還是按列往下排,而在c 中是按行,既 int a 2 2 a...