C語言中整型陣列的每個元素在記憶體中是如何存放的

時間 2022-03-08 16:05:14

1樓:風若遠去何人留

整型陣列每個元素在記憶體中連續儲存,每個整型元素儲存方式取決於機器硬體。

一、陣列元素都是連續儲存的,位址依次從低到高。

如字元陣列 char a[10];

其元素有10個,為a[0]到a[9], 位址連續。 如果a的起始位址為0x1234,那麼後續位址依次為0x1235, 0x1235...0x123d。

二、每個元素具體儲存方式,取決於cpu。 有兩種:

1、小端(little endian):

將低序位元組儲存在起始位址(低位編址), 位址低位儲存值的低位,位址高位儲存值的高位 。

目前大多數cpu是按照這種方式儲存的,包括intel和移動端最常見的arm。

比如4位元組整型值為0x12345678的情況,那麼在記憶體中會儲存為:

0x78 0x56 0x34 0x12

2、大端(big endian):

與小端相反, 將高序位元組儲存在起始位址(高位編址),位址低位儲存值的高位,位址高位儲存值的低位。

之前的例子在大端情況下儲存為:

0x12 0x34 0x56 0x78

2樓:

每個數占4位元組,從低位址到高位址,先存放下標為0的元素,緊接著存放下標為1的元素……以此類推,沒有間隔,直到整個陣列結束。

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

3樓:非常可愛

在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;

4樓:進理秦剛捷

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

輸出結果如下:

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

a[0][0]

a[0][1]

a[1][0]

a[1][1]

a[2][0]

a[2][1]

5樓:匿名使用者

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

6樓:匿名使用者

假設陣列是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

7樓:友人改變自己

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

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

8樓:鬱筱羽

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

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

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

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

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

9樓:喵星球的大橘

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函式逐個對陣列元素賦值。

10樓:匿名使用者

答案為a。

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

假設有陣列如下:

int x=;

char ca[5]=;

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

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

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

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

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

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

11樓:匿名使用者

#include

int main(),};

for (int i = 0; i < 2; i++)}return 0;

}輸出結果:

a[0][0] 的位址

0028fef8

a[0][1] 的位址 0028fefc

a[1][0] 的位址 0028ff00

a[1][1] 的位址 0028ff04

process returned 0 (0x0) execution time : 0.657 s

press any key to continue.

懂了嗎?

12樓:風信標

當然是按行存放,而且是緊密存放

c語言的基本型別在記憶體中怎麼儲存的?

13樓:仁昌居士

c語言的基本型別在記憶體中以二進位制的形式儲存的。

1、整型資料:所有整數(正負零)在記憶體中都專是以補碼的

屬形式存在。對於乙個正整數來說,它的補碼就是它的原碼本身。對於乙個負整數來說,它的補碼為原碼取反再加1。

2、字元型資料:把字元的相對應的ascii碼放到儲存碼單元中,而這些ascii**值在計算機中同樣以二進位制補碼的形式存放的。

3、實型資料:也叫浮點數, 在計算機中也是以二進位制的方式儲存,關鍵在於如何將十進位制的小數轉化為二進位制來表示。

展資料:

根據計算機的內部字長和編譯器的版本,c語言的基本型別表示的數的長度範圍是有限定的。十進位制無符號整常數的範圍為0~65535,有符號數為-32768~+32767。八進位制無符號數的表示範圍為0~0177777。

十六進製制無符號數的表示範圍為0x0~0xffff或0x0~0xffff。

如果使用的數超過了上述範圍,就必須用長整型數來表示。長整型數是用字尾「l」或「l」來表示的。長整數158l和基本整常數158在數值上並無區別。

c語言首先完成包含整型元素的陣列的公升序排序,然後最大值和最小值互換急

include 初始化陣列 void input num int a 公升序排列所有元素 void sort int a 遍歷陣列 void show array int a 排序後互換最大和最小值 void change max min int a int main void void input...

VB語言定義大小為元素的整型陣列

司馬刀劍 private sub command1 click dim a n as integera array 999,15,28,37,45,58,61,75,85,90,92 print 原有的陣列元素是 for i 1 to ubound a print a i next i print ...

c語言程式設計 輸入兩個陣列,每個陣列不超過元素,將只在陣列中出現的數全部輸出

意思就是a陣列中的數b陣列沒有唄.要自己寫才有有意思 雙層for迴圈 把a i 元素 和每個b元素if一下 設定一個計數器 如果對比10次計數器都沒增加 則輸出a i 元素.然後計數器歸零 再進入外部迴圈.如此反覆10次 然後再把a和b兌換下 再來一次上面的就能把b的元素輸出了. include s...