A. 二維數組元素在內存中的存放順序是
二維數組元素在內存中的存放順序是按行存放。
當進行數據的存取時,在無x的條件下不可能取出值。但是在沒有y的條件下,可以通過地址取出x行的某個值。當知道x的值,代表能確定這一行的首地址,因為二維數組按照行存放,所以第x行的數據地址關系排列遞增的。
如果二維數組按列存放,則知道y值,可以確定首地址的值,去進行值得存取。顯然由於c語言不支持這樣的方式,所以C語言中二維數組按照行存放。
(1)二維數組三維數組在內存存儲序列擴展閱讀
常用的二維數組的表示方法
第一種是普通的二維數組的表示方法。
第二種是用一維數組來表示二維數組,從顯示的元素地址可以看出,二維數組和一維數組表示的二維數組在內存中的儲存方式其實是一樣的,不過使用二維數組看起來要簡單些,只要不用進行地址轉換。
第三種表示是用指針數組。這種方法對各個元素大小不一樣的情況下比較適用。
第四種方式為用指向指針的變數來表示。此種方式p是指向指針的指針,不能把普通的二維數組的首地址賦給它,可以把第三種方式中的數組指針的首地址賦給它,這種方式用的較少。
B. 在C語言中,二維數組元素在內存中的存放順序是 A按行存放 B按列存放 C由用戶自己定義 D由編譯器決定
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,2,3,4},{5,6,7,8},{9,10,11,12} }
(2)二維數組三維數組在內存存儲序列擴展閱讀:
1、表示方法:
數組元素也是一種變數, 其標識方法為數組名後跟一個下標。下標表示了元素在數組中的順序號。數組元素的一般形式為:數組名[下標] 其中的下標只能為整型常量或整型表達式。如為小數時,C編譯將自動取整。例如,a[5],a[i+j],a[i++]都是合法的數組元素。數組元素通常也稱為下標變數。必須先定義數組, 才能使用下標變數。
2、賦值方法:
初始化賦值的一般形式為:static類型說明符數組名[常量表達式]={值,值……值}; 其中static表示是靜態存儲類型, C語言規定只有靜態存儲數組和外部存儲數組才可作初始化賦值。在{ }中的各數據值即為各元素的初值, 各值之間用逗號間隔。例如:static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相當於a[0]=0;a[1]=1...a[9]=9;
3、使用規則:
一、數組的類型實際上是指數組元素的取值類型。對於同一個數組,其所有元素的數據類型都是相同的。
二、數組名的書寫規則應符合標識符的書寫規定。
三、數組名不能與其它變數名相同。
四、可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。
五、只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;(請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,資料庫是從1開始。)
六、若不給可初始化的數組賦初值,則全部元素均為0值。
七、假如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5}; 可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。
參考資料來源:網路-二維數組
網路-數組
C. 二維數組是如何存儲的
二維數組A[m][n]可以視為由m個行向量組成的向量,或者是由n個列向量組成的向量。
由於計算機的內存是一維的,多維數組的元素應排成線性序列後存入存儲器。數組一般不做插入和刪除操作,即結構中元素個數和元素間的關系不變。所以採用順序存儲方法表示數組。
1、行優先存儲
將數組元素按行向量排列,第i+1個行向量緊接在第i個行向量後面。
【例】二維數組A[m][n]按行優先存儲的線性序列為:
A[0][0]、A[0][1]…A[0][n]、A[1][1]、A[1][1]…A[1][n]…A[m][n]、A[m][1]…A[m][n]
在PASCAL和C語言中數組按行優先順序存儲。
2、列優先存儲
將數組元素按列向量排列,第i+1個列向量緊接在第i個列向量後面。
【例】二維數組A[m][n]按列優先存儲的線性序列為:
A[0][0]、A[1][0]…A[m][0]、A[0][1]、A[1][1]…A[m][1]…A[m][1]、A[0][n]…A[m][n]
ORTRAN語言中,數組按列優先順序存儲。
D. 在C++語言中,二維數組在內存中的存放順序是
二維數組在c++中存儲,一般是按行存儲的,就是將一行當作一維數組進行存儲。
例如:a[2][2]這個二維數組,其在內存中存儲順序為:
a[0][0] a[0][1] //先存儲第一行
a[1][0] a[1][1] //再存儲第二行。
假設是32位系統,整型佔4個位元組,則其在內存的形式為:
a[0][0]
a[0][1]
a[1][0]
a[1][1]
E. 二維數組在內存中是如何存儲的
二維數組在內存中是如何存儲的,這不是一定的,具體要看編譯系統是如何規定的。
對於多數編譯系統而言,都是採用「行優先」的策略,比如一個int a[5][3]數組,它是從首地址開始依次是a[0][0],a[0][1],a[0][2],然後是a[1][0],a[1][1],a[1][2],……。直到最後是a[4][0],a[4][1],a[4][2]。
F. c語言問題:c語言中二維數組在內存中怎樣存儲
嚴格意義上說不存在二維數組,只是數組里的每個元素是一個一維數組,而內存是一段連續的空間,根據你申請一個變數的順序按地址從低到高排,所以二維數組不可能像一個矩陣那樣在內存中排列,這就涉及到它是按行依次往下排,還是按列往下排,而在c++中是按行,既 int a[2][2]
a[0][0]
a[0][1]
a[1][0]
a[1][1]
G. 在C語言中,二維數組元素在內存中的存放順序是____。(
在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 個位元組。
(7)二維數組三維數組在內存存儲序列擴展閱讀
C++動態二維數組:
以整形為例,row為行數,col為列數
int **data;//存儲二維數組的指針(指向指針的指針。date=x[0][0]的地址。這樣標會更好。因為sizeof(date)結果為4不可能存下二維數組)。
//以下實現如何申請內存
data = new int *[row];
for (int k = 0; k < row; k++)
{
data[k] = new int[col];
}
//賦值跟普通二維數組一樣 例如
data[0][0] = 5; //將二維數組1行1列(C++中稱為0行0列)賦值為5
//刪除內存
for (int i = 0 ; i < row; ++i)
{
delete [] data[i]; //此處的[]不可省略
}
delete [] data;
H. 二維數組的數據在內存上怎麼安排
內存上就是一塊連續分配的地址空間,數據按先行,後列的方式,按順序依次存儲。
如a[3][3] = {1,2,3,4,5,6,7,8,9}
空間里存儲順序就是 startAddress: 1 2 3 4 5 6 7 8 9 (從起始地址,連續存放)