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

2021-03-04 06:28:34 字數 5834 閱讀 5875

1樓:匿名使用者

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

a[0][0]

a[0][1]

a[1][0]

a[1][1]

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

2樓:匿名使用者

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

a[0][0]

a[0][1]

a[1][0]

a[1][1]

3樓:匿名使用者

嚴格意義上說不存在二維陣列,只是陣列裡的每個元素是乙個一維陣列,而記憶體是

專一段連續的空間屬,根據你申請乙個變數的順序按位址從低到高排,所以二維陣列不可能像乙個矩陣那樣在記憶體中排列,這就涉及到它是按行依次往下排,還是按列往下排,而在c++中是按行,既 int a[2][2]

a[0][0]

a[0][1]

a[1][0]

a[1][1]

4樓:匿名使用者

在c/c++中多維數bai組都是以行的形式連du續地分布在記憶體中的,zhi來個例子dao:

int a[2][2];

則其在記憶體中內

的表現方式為:

a[0][0], 低位址

容a[0][1],

a[1][0],

a[1][1],高位址

5樓:匿名使用者

指向一維陣列的指標陣列。

在c語言中,二維陣列元素在記憶體中的存放順序是____。(

6樓:非常可愛

在c語言裡二維陣列元素在記憶體中是按行存放的。

二維陣列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 個位元組。

擴充套件資料

c++動態二維陣列:

以整形為例,row為行數,col為列數

int **data;//儲存二維陣列的指標(指向指標的指標。date=x[0][0]的位址。這樣標會更好。因為sizeof(date)結果為4不可能存下二維陣列)。

//以下實現如何申請記憶體

data = new int *[row];

for (int k = 0; k < row; k++)

//賦值跟普通二維陣列一樣 例如

data[0][0] = 5; //將二維陣列1行1列(c++中稱為0行0列)賦值為5

//刪除記憶體

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

delete data;

7樓:進理秦剛捷

自己用vc++6.0作了測試,**如下:

輸出結果如下:

可見,此二維陣列在記憶體中按照如下順序存放:

a[0][0]

a[0][1]

a[1][0]

a[1][1]

a[2][0]

a[2][1]

8樓:匿名使用者

在c語言中,二維陣列元素在記憶體中的存放順序是(按行存放)即在記憶體中線順序存放第一行的元素,再存放第二行的元素。

9樓:匿名使用者

假設陣列是a[m][n],並且假定系統為其分配的是一整塊記憶體,那麼元素在記憶體中存放的順序依次是:

a[0][0],a[0][1].....a[0][n-1],a[1][0],a[1][1].....a[1][n-1],a[2][0],a[2][1].....

a[2][n-1].......

a[m-1][0],a[m-1][1].....a[m-1][n-1]

共mxn個元素。請注意,分行/分列是人為的,只是為了便於從邏輯上描述,實際上每乙個元素的起始位址,從左到右,再到下一行的最左邊,都是順序增加的。

下面是用來驗證上述元素順序的乙個簡單小程式以及執行結果。

#include

int main()

p=&a[0][0];

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

return 0;

}程式執行結果:

a[0][0]=2

a[0][1]=3

a[0][2]=4

a[0][3]=5

a[1][0]=4

a[1][1]=6

a[1][2]=8

a[1][3]=10

a[2][0]=6

a[2][1]=9

a[2][2]=12

a[2][3]=15

*(p+0)=2

*(p+1)=3

*(p+2)=4

*(p+3)=5

*(p+4)=4

*(p+5)=6

*(p+6)=8

*(p+7)=10

*(p+8)=6

*(p+9)=9

*(p+10)=12

*(p+11)=15

10樓:友人改變自己

在c語言中,二維陣列元素在記憶體中的存放順序是 先行後列

c語言中二維陣列在記憶體中是按什麼優先存放的?

11樓:二蛋的哥哥哥

c語言中

二維陣列是按行優先儲存的

即 在記憶體中存乙個二維陣列時 先把陣列中第一行的陣列元素存完 再接著存下一行的 直到存完。

ps:定義乙個二維陣列 如 int a[m][n] 該陣列為m行 n列的矩陣,在記憶體中 這樣順序存的:

a[0][0] a[0][1] ... a[0][n-1] a[1][0] a[1][1]...

不知道是不是幫到你的忙瞭望採納

12樓:匿名使用者

比如a[2][3];的存放順序是:

a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]

13樓:公尺呀你

c語言陣列是行優先的

在c語言中,二維陣列元素在記憶體中的存放順序是 a按行存放 b按列存放 c由使用者自己定義 d由編譯器決定

14樓:鬱筱羽

二維陣列在記憶體中按行存放。

二維陣列在c語言中的定義為:int a[x][y]。具體理解為二維陣列a,有x行資料,每行資料有y個。

解釋:當我們在進行資料的訪問時,在無x的條件下不可能取出值。但是在沒有y的條件下,可以通過位址取出x行的某個值。

當我們知道x的值,代表我們能確定這一行的首位址,因為二維陣列按照行存放,所以第x行的資料位址關係排列遞增的。

反證法:如果二維陣列按列存放,則我們知道y值,可以確定首位址的值,去進行值得訪問。顯然由於c語言不支援這樣的方式,所以c語言中二維陣列按照行存放。

15樓:喵星球的大橘

c語言中,二維陣列

元素在記憶體中是按行存放的。

二維陣列本質上是以陣列作為陣列元素的陣列,即「陣列的陣列」,型別說明符 陣列名[常量表示式][常量表示式]。二維陣列在概念上是二維的,即是說其下標在兩個方向上變化, 下標變數在陣列中的位置也處於乙個平面之中, 而不是象一維陣列只是乙個向量。

但是,實際的硬體儲存器卻是連續編址的, 也就是說儲存器單元是按一維線性排列的。如何在一維儲存器中存放二維陣列,可有兩種方式:一種是按行排列, 即放完一行之後順次放入第二行。

另一種是按列排列, 即放完一列之後再順次放入第二列。在c語言中,二維陣列是按行排列的。

例如:float a[3][4],b[5][10];     定義a為3*4(3行4列)的陣列,b為5*10(5行10列)的陣列。注意,不能寫成 float a[3,4],b[5,10];  具體可以表示:

a[3][4]=,, }

擴充套件資料:

1、表示方法:

陣列元素也是一種變數, 其標識方法為陣列名後跟乙個下標。下標表示了元素在陣列中的順序號。陣列元素的一般形式為:

陣列名[下標] 其中的下標只能為整型常量或整型表示式。如為小數時,c編譯將自動取整。例如,a[5],a[i+j],a[i++]都是合法的陣列元素。

陣列元素通常也稱為下標變數。必須先定義陣列, 才能使用下標變數。

2、賦值方法:

初始化賦值的一般形式為:static型別說明符陣列名[常量表示式]=; 其中static表示是靜態儲存型別, c語言規定只有靜態儲存陣列和外部儲存陣列才可作初始化賦值。在中的各資料值即為各元素的初值, 各值之間用逗號間隔。

例如:static int a[10]=; 相當於a[0]=0;a[1]=1...a[9]=9;

3、使用規則:

一、陣列的型別實際上是指數組元素的取值型別。對於同乙個陣列,其所有元素的資料型別都是相同的。

二、陣列名的書寫規則應符合識別符號的書寫規定。

三、陣列名不能與其它變數名相同。

四、可以只給部分元素賦初值。當中值的個數少於元素個數時,只給前面部分元素賦值。例如:

static int a[10]=;表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。

五、只能給元素逐個賦值,不能給陣列整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]=;而不能寫為:

static int a[10]=1;(請注意:在c、c#語言中是這樣,但並非在所有涉及陣列的地方都這樣,資料庫是從1開始。)

六、若不給可初始化的陣列賦初值,則全部元素均為0值。

七、假如給全部元素賦值,則在陣列說明中, 可以不給出陣列元素的個數。例如:static int a[5]=;  可寫為:

static int a=;動態賦值可以在程式執行過程中,對陣列作動態賦值。這時可用迴圈語句配合scanf函式逐個對陣列元素賦值。

16樓:匿名使用者

答案為a。

關於c語言中的陣列存放順序是這樣的:

假設有陣列如下:

int x=;

char ca[5]=;

陣列名即代表陣列的位址,陣列的位址==陣列名(ca)==陣列的首元素的位址&ca[0]

在記憶體中,記憶體從大到小進行定址,為陣列分配了儲存空間後,陣列的元素自然的從上往下排列儲存,整個陣列的位址為首元素的位址。

模擬該陣列的記憶體儲存細節如下:

注意:字元在記憶體中是以對應ascii值的二進位制形式儲存的,而非上表的形式。

在這個例子中,陣列x的位址為它的首元素的位址0x08,陣列ca的位址為0x03。

在二維陣列中a[y][x],其中x下標表示的是行,y下標表示的是列,而看上圖,是以x下標為優先順序儲存的,因此,答案是a:按行存放。

關於c語言二維陣列的問題,C語言中二維陣列的定義問題

a是乙個一維陣列,陣列裡的值是指標,指向的還是一維陣列。即等價於,int x 2 2,0 int y 2 4,8 int a 2 x,y 我想你應該知道答案了。c語言中二維陣列的定義問題 正確寫法如下 char fd jgf1 maxitemlen 1 說明 把null去掉 1.二維陣列的第乙個維度...

在C語言中,寫出二維陣列元素a在記憶體中的存放順序

像a 2 3 這種靜來態記憶體儲存的資料自 他們在記憶體bai中存放記憶體都du是相連的差不多是按順序的zhi a 0 0 a 0 1 a 0 2 a 1 0 a 1 1 a 1 2 可以看作是daoa 0 0 a 0 1 a 0 2 和a 1 0 a 1 1 a 1 2 兩個陣列 但是他們的記憶體...

C語言中,怎樣將一維陣列中的數,賦給二維陣列

可以採用兩種方式 1 按元素賦值 遍歷一維陣列,並將每個元素賦值到二維 內陣列的對應元素上容。或者遍歷二維陣列,將每個元素賦值為一維陣列對應值上。優點為操作靈活,可以按照需要任意賦值。2 當一維陣列和二維陣列型別相同,而且賦值順序與一維陣列中的儲存順序完全相同時,可以用memcpy的方式,直接一次性...