二維陣列的位址問題,二維陣列位址問題,求詳解

時間 2023-05-09 10:45:06

1樓:草原上之狼

1、&a[0][0]為0行0列元素的首位址,a[0]+n為0行第n個元素位址,那麼a[0]是表示0行首元素位址嗎?

正確, a[0]就是0行首位址。

a[0]是零行的首位址,實際上行的位址也只有乙個,也無所謂0行的首位址吧?

&a[0]值上, 是和a[0]相同的, 不過型別不一樣。 a[0]等效於int *型,實際上是指向乙個元素。 而&a[0]是行指標, 指向一行。

所以,a[0]+n和&a[0]+n是完全不同的。

n相當於元素位移了n個位置嗎,所以代表第n個元素位址嗎?

+n取決於原始指標的型別。 如果是a[0]+n 移動的是n個元素。而&a[0]+n就是移動n行了。

然後*(a[n]+m)就表示n行第m個元素了?

這句沒錯。 任何情況下, *p+n)都等效於p[n]2、書中寫a+n表示第n行的首位址,那是相當於&a[n]嗎,a不是表示陣列首個元素位址嗎,怎麼+n不是元素位置改變,卻是位移了行?

這個上面說過了, 核心在於指標的型別。 二維陣列int a[m][n]的陣列名a, 本質上是常量的int (*n]型別, 也就是陣列指標。 移動的時候是整行移動的。

還是a+n表示n行首個元素的位址?為什麼。

同上*(a+n)與a[n]是等價的,原理是什麼,*(a+n)+m)怎麼也能表示n行m列元素呢?

*a+n)與a[n]等價, 這個是c語言的乙個規則。 其本質是, 當編譯器遇到a[n]這樣的形式時, 實際上是翻譯成*(a+n)進行編譯的。 這種可以用乙個很少見的形式來驗證。

你定義。int a[4]=;然後輸出。

printf("%d", 3[a]);

對, 就是把陣列名放進,實際上會輸出a[3]

2樓:九聽安查懿

a是這個二維陣列所有元素的首位址,a[3][3]這個二維陣列可以分成3個一維陣列,a[0]

a[1]和a[3]a[0]是a[0]這個一位陣列的首位址,雖能他們的值相同,但是意義不同。定義的指標不能指向a,只能指向a[0]。我試了一下,二個都可以指。

二維陣列位址問題,求詳解

3樓:

二給陣列在內在中是連續儲存的,若有int a[20][20],則儲存如下示意:

第1行:a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5],a[0][6],a[0][7],a[0][8],a[0][9],a[0][10],a[0][11],a[0][12],a[0][13],a[0][14],a[0][15],a[0][16],a[0][17],a[0][18],a[0][19],第2行:

a[1][0],a[1][1],.a[1][19],.

第11行:a[10][0],a[10][1],a[10][2],a[10][3],a[10][4],a[10][5],.a[10][19],.

第19行:a[18][0],a[18][1],a[18][2],a[18][3],a[18][4],a[18][5],a[18][6],a[18][7],a[18][8],a[18][9],.a[18][19]

計算一下從a[10][5]~a[18][9]經過了幾個元素,用元素數乘以4,結果+1000,就是a[18][9]所在位址。所以1000+((18-10)x20-5+9)x4=1656.。

其中:(18-10)經過的行數,5開始列數,9是結束列數。

4樓:網友

首先,要知道這個二維陣列每組的維度。行維:11,列維:16

二維陣列的陣列名和位址問題

5樓:網友

首先,必須明確的是,a[4][2]是乙個二維陣列的時候,,你輸出a的時候是乙個位址;

其次,你對a進行取位址&,那麼其結果還是乙個位址,這個位址是a存放的位址,不是a的輸出位址。

#include

void main()

int *p1;

int **p2;

p1=a[0];

p2=&p1;

printf("%10d%10d",p1,*p1);

printf("%10d%10d%10d",p2,p2+1,*p2);}

6樓:金色潛鳥

a 是 這個二維陣列 的首位址。

a 也是 這個二維陣列 的首位址。

單獨 輸出 a, 和 &a 是 一樣的 位址值。

a+1, 是 a陣列第2行的首位址,即 &a[1][0]。 等於 二維陣列 的首位址 + 一行占用的記憶體位元組數。

a + 1, 不是簡單的 首位址 加 1,而是 首位址 + 整個陣列占用的記憶體位元組數。

也就是說 此1 非那1:

a+1, 是 加一行大小。

a + 1, 是 加整個陣列大小。

用式子計算時要注意 &a[0][0] 或 &a 是位址,不能直接 + sizeof(a), 因為 sizeof(a) 是 int 型。輸出格式 %10d, 則 相加時 要用 (int)(&a[0][0]) sizeof(a) ,若用: (a[0][0]) sizeof(a) 結果不對 --c 語言 「奇葩」 之一。

三維陣列求位址 10

7樓:匿名使用者

a的第一維元素個數為8-1+1 = 8,第二維元素個數為9-0+1= 10,第三維元素個數為11-4+1=8

這裡認為每個整數占用4個位元組,如果是別的數量,改一下下面的4就可以了:

loc(a[7][3][9]) 1000 + 4 * 7 - 1) *10 * 8 + 3 - 0) *8 + 9 - 4)]

關於二維陣列元素的位址表示方法 怎麼理解呀 **求解

8樓:匿名使用者

&a[i][j] 表示陣列a中第i行第j列的元素的位址。

a[i]+j 如果陣列a定義為乙個二維陣列,那麼a[i]+j 就表示第i行第j列的元素的位址,和上面那個一樣,如果陣列a是一維陣列,那麼就表示乙個表示式的值。

a+1)=j 陣列名表示第乙個元素的位址,加1後表示a[0][1]的位址,這句相當於a[0][1]=j;

a[0][0]+4*i+j 這個表示a[i][j]的位址,前提是a的列數為4

a[0]+4*i+j 這個表示a[4*i+j][0]的位址,因為a[0]表示第一行的位址,遞增的單位為一行。

資料結構二維陣列求位址

9樓:匿名使用者

由於二維陣列是一維線性儲存方式,所以可得等式:

8*10+4 = y*9 + x 並且 0 <=x <=8 並且 1 <=y <=10

解出來後,x=3,y=9,因為列下標從1開始,所以答案是a[3,10]

關於座標是否該減一,這個不是記住的,是根據實際情況決定的,建議你把那個二維陣列按照題目要求畫出來,再看是不是要減一。

10樓:行行都不行

思路沒問題,算式不對:

元素a[8,5]的起始位址為b+(10*8+4)*6=b+504,按列存放時的起始位址為b+504的元素,即9*(i-1)+j=84.

畫乙個9行10列的**看看就很清楚了。

c語言的二維陣列位址問題

11樓:錯瀅池歌闌

答:二維陣列a[3][4]中,a[1]+1是陣列a[1]的第2個元素的位址,a[0]+4是陣列a[0]的第5個元素的位址,但a[0]只有4個元素,所以a[0]+4就是a[1]首元素的位址,因此這是兩個不同的位址。

另外,也可以將二維陣列a[3][4]看成一維陣列a[12],那麼原來的a[1]+1就是一維陣列的a[5]的位址,而原來的a[0]+4是一維陣列的a[4]的位址,由此可見,這是兩個不同的位址。

c語言的二維陣列位址問題

12樓:緱剛偶懷蕾

答:二維陣列。

2113a[3][4]中,a[1]+1是陣列5261a[1]的第2個元素的位址,a[0]+4是陣列a[0]的第5個元素的位址,但a[0]只有4個元素,所以a[0]+4就是a[1]首元素的位址,因此4102這是兩個不同的位址。

另外,也可以1653將二維陣列a[3][4]看成一維專陣列a[12],那麼原來的a[1]+1就是。

一維陣列。的a[5]的位址,而原來的a[0]+4是一維陣列的a[4]的位址,由此可見屬,這是兩個不同的位址。

定義二維陣列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 ...

求助 C語言二維陣列指標問題,c語言二維陣列用指標表示的問題

1.對於int p a p型別和a是不同的。p是指向乙個指標 指向int型別的量 的指標,a則是指向乙個一維陣列 含2個int元素 的指標。想要建立相同型別的指標應該用int p 2 才行 3.感覺p跟a就同級吧但型別不同 所以其實int p a 兩側的指標的型別是不相同的,只是a的值賦給p而已 假...

c二維陣列名指的是陣列的首位址嗎

祿學校寄藍 是的,你可以試試看,比如int arr 4 4 cout arr arr 0 0 比較一下陣列名和陣列第乙個元素位址的值比較一下,看是不是相等 陣列名所代表的資料型別是指標常量,二維陣列就是指標的指標 二重指標,二重指標所存的內容就是一重指標的位址。所以二維陣列代表的是二重指標常量,所儲...