『壹』 數據結構的數組中,以行為優先和以列為優先分別是怎樣存儲的,怎麼計算
Am*n L(位元組)
行:Loc(i,j)=Loc(0,0)+(i*n+j)*L
Loc(i,j)=Loc(1,1)+((i-1)*n+i-1)*L
列:Loc(i+j)=Loc(0,0)+(j*m+i)*L
Loc(i,j)=Loc(1,1)+((i-1)*m+i-1)*L
『貳』 在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語言數組為什麼按行優先存儲
c語言中
二維數組是按行優先存儲的
即
在內存中存一個二維數組時
先把數組中第一行的數組元素存完
再接著存下一行的
直到存完。
ps:定義一個二維數組
如
int
a[m][n]
該數組為m行
n列的矩陣,在內存中
這樣順序存的:
a[0][0]
a[0][1]
...
a[0][n-1]
a[1][0]
a[1][1]...
不知道是不是幫到你的忙了
望採納
『肆』 二位數組中有行列優先對元素的存儲位置有什麼影響
數組在內存中是以連續的內存單元排列的,一般都是行優先,比如二維數組在內存中的排列順序是
a[0][0],a[0][1],a[0][2],a[1][0],a[1][1]...這就是行優先,有什麼意義呢,如果純粹用數組的下標來訪問當然就不必考慮什麼行優先,但是如果在某些特殊情況下要求性能比較苛求的情況,通過數組的首地址,在根據偏移量,在根據是行優先,可以直接計算出需要訪問的下一個地址,相對於通過數組下標進行操作要快,因為不用重復計算數組的首地址,而是直接進行偏移計算就可以了,而通過數組下標訪問每次都要計算一遍首地址
『伍』 二維數組元素在內存中的存放順序是
二維數組元素在內存中的存放順序是按行存放。
當進行數據的存取時,在無x的條件下不可能取出值。但是在沒有y的條件下,可以通過地址取出x行的某個值。當知道x的值,代表能確定這一行的首地址,因為二維數組按照行存放,所以第x行的數據地址關系排列遞增的。
如果二維數組按列存放,則知道y值,可以確定首地址的值,去進行值得存取。顯然由於C語言不支持這樣的方式,所以C語言中二維數組按照行存放。
(5)數組優先順序存儲原則擴展閱讀
常用的二維數組的表示方法
第一種是普通的二維數組的表示方法。
第二種是用一維數組來表示二維數組,從顯示的元素地址可以看出,二維數組和一維數組表示的二維數組在內存中的儲存方式其實是一樣的,不過使用二維數組看起來要簡單些,只要不用進行地址轉換。
第三種表示是用指針數組。這種方法對各個元素大小不一樣的情況下比較適用。
第四種方式為用指向指針的變數來表示。此種方式p是指向指針的指針,不能把普通的二維數組的首地址賦給它,可以把第三種方式中的數組指針的首地址賦給它,這種方式用的較少。
『陸』 c語言中二維數組在內存中是按什麼優先存放的
C語言中
二維數組是按行優先存儲的
即 在內存中存一個二維數組時 先把數組中第一行的數組元素存完 再接著存下一行的 直到存完。
ps:定義一個二維數組 如 int a[m][n] 該數組為m行 n列的矩陣,在內存中 這樣順序存的:
a[0][0] a[0][1] ... a[0][n-1] a[1][0] a[1][1]...
不知道是不是幫到你的忙了
望採納
『柒』 數組的定義中,元素按照一定順序存儲,如何理解這個順序
數組的定義中,元素按照一定順序存儲。這是因為比如說二維數組的時候,有的編譯系統是按照行優先存儲,而有的編譯系統是按照列優先存儲,但是有一點,所有的數組元素都是連著存儲在一起的。
『捌』 matlab和Fortran二維數組為什麼按列優先存儲
行優先和列優先兩種。具體情況如下:數組的順序存儲方式由於計算機內存是一維的,多維數組的元素應排成線性序列後存人存儲器。數組一般不做插入和刪除操作,即結構中元素個數和元素間關系不變化。一般採用順序存儲方法表示數組。(1)行優先順序將數組元素按行向量排列,第i+1個行向量緊接在第i個行向量後面。【例】二維數組Amn的按行優先存儲的線性序列為:a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn注意:①PASCAL和C語言中,數組按行優先順序存儲。②行優先順序推廣到多維數組,可規定為先排最右的下標。(2)列優先順序將數組元素按列向量排列,第i+1個列向量緊接在第i個列向量後面。【例】二維數組Amn的按列優先存儲的線性序列為:a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn注意:①FORTRAN語言中,數組按列優先順序存儲。②列優先順序推廣到多維數組,可規定為先排最左的下標。
『玖』 在C中,多維數組元素的存儲順序是按照什麼原則進行
例如二維數組,int
digi[2][2],可以理解為此數組有二行二列,即int
digi[行][列]
排列順序:排完第一行,再排第二行,則有
第一行:
digi[0][0]
digi[0][1]
第二行:
digi[1][0]
digi[1][1]
…
可以理解成,行在前面較列(後面)大,列排序由小到大,排完第一行在排第二行,依此類推。
……又例如三維數組,int
Iarr[2][2][2],可以理解為,2排2行2列,(比喻成班級成員可分為,小組,組,一班)……
顯然排序,當然第一排排完後再到第二排最後到第三排,但是排內部又有行,當然第一行排完後再到第二……,列同樣如此,
簡單理解:排>行>列,(大到小)
所以上面排序為:
第一排
第一行
Iarr[0][0][0]第一列
Iarr[0][0][1]第二列
第二行
Iarr[0][1][0]第一列
Iarr[0]
[1][1]第二列
……
第二排
第一行
Iarr[1][0][0]第一列
Iarr[1][0][1]第二列
第二行
Iarr[1][1][0]第一列
Iarr[1][1][1]第二列
『拾』 對於二維數組,有行優先順序和什麼兩種不同的存儲方式
對於二維數組,有行優先順序和列優先順序兩種不同的存儲方式。
二維數組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 個位元組。
(10)數組優先順序存儲原則擴展閱讀:
數組中的各元素的存儲是有先後順序的,它們在內存中按照這個先後順序連續存放在一起。數組中的所有元素都具有相同類型(和結構類中的欄位不同,它們可以是不同類型)。數組中的元素存儲在一個連續性的內存塊中,並通過索引來訪問(和結構類中的欄位不同,它們通過名稱來訪問)。
在增加數組的維數時,數組所佔的存儲空間會大幅度增加,所以要慎用多維數組。使用 Variant 數組時更要格外小心,因為他們需要更大的存儲空間。