當前位置:首頁 » 存儲配置 » 三維數組按行存儲什麼意思

三維數組按行存儲什麼意思

發布時間: 2022-06-10 05:35:52

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]...
不知道是不是幫到你的忙了
望採納

② C++語言中的三維及多維數組怎麼理解有什麼用

三維及多維數組,其實就是用來存儲某個需要由三個未知數來確定的值,其實就相當於一個函數,這個函數有三個未知量,它的值,由這個未知數(下標)來確定。個人認為,理解三維及多維數組,其實只要理解的存儲結構,然後能用指針或者下標方式來訪問數組就行了!多維數組的存儲結構也是按照線性存儲的,由一組連續的存儲單元構成!

③ 怎麼計算三維數組的存儲地址

假設數組各維的下界是不是1,二維數組A(mn)按「行優先順序」存儲在內存中,假設每個元素佔用d個存儲單元。元素a(ij)的存儲地址應是數組的基地址加上排在a(ij)前面的元素所佔用的單元數。因為a(ij)位於第i行、第j列,前面i-1行一共有(i-1)×n個元素,第i行上a(ij)前面又有j-1個元素,故它前面一共有(i-1) ×n+j-1個元素。
因此,a(ij)的地址計算函數為:LOC(aij)=LOC(a11)+[(i-1)*n+j-1]*d。
同樣,三維數組A(ijk)按「行優先順序」存儲,其地址計算函數為:LOC(aijk)=LOC(a111)+[(i-1)*n*p+(j-1)*p+(k-1)]*d。

上述討論均是假設數組各維的下界是1,更一般的二維數組是A[c1..d1,c2..d2],這里c1,c2不一定是1。a(ij)前一共有i-c1行,二維數組一共有d2-c2+1列,故這i-c1行共有(i-c1)*(d2-c2+1)個元素,第i行上a(ij)前一共有j-c2個元素。
因此,a(ij)的地址計算函數為:LOC(aij)=LOC(ac1c2)+[(i-c1)*(d2-c2+1)+j-c2)]*d。

例如,在C語言中,數組各維下標的下界是0,因此在C語言中,二維數組的地址計算公式為:LOC(aij)=LOC(a00)+(i*(d2+1)+j)*d。

④ 數組的分類

數組分類

1.數組是由一組有序的值或鍵值對組成的數據結構

2.數組根據鍵名類型分為:索引數組 與 關聯數組 二大類

3.索引數組:鍵名是元素的位置索引,默認從0開始,採用系統自動處理可以省略鍵名

4.關聯數組:鍵名是自定義的字元串,類似於對象中的屬性列表



數組類型

編輯語音

多維數組

有時需要追蹤記錄數組中的相關信息。

例如,為了追蹤記錄計算機屏幕上的每一個像素,需要引用它的 X、Y坐標。這時應該用多維數組存儲值。

可用 Visual Basic 聲明多維數組。

例如,下面的語句聲明了一個過程內的 10 × 10 的二維數組。

Static MatrixA (9,9) As Double

可用顯式下界來聲明兩個維數或兩個維數中的任何一個:

Static MatrixA (1 To 10,1 To 10) As Double

可以將所有這些推廣到二維以上的數組。例如:

Dim MultiD (3,1 To 10,1 To 15)

這個聲明建立了三維數組,大小為 4 × 10 × 15。元素總數為三個維數的乘積,為 600。

注意

在增加數組的維數時,數組所佔的存儲空間會大幅度增加,所以要慎用多維數組。使用 Variant 數組時更要格外小心,因為他們需要更大的存儲空間。

用循環操作數組

可以用 For循環嵌套有效的處理多維數組。例如,在 MatrixA 中基於每個元素在數組中的位置為其賦值:

Dim I As Integer,J As Integer

Static MatrixA(1 To 10,1 To 10) As Double

For I = 1 To 10

For J = 1 To 10

MatrixA (I,J) = I * 10 + J

Next J

Next I

一維數組

定義

一維數組是最簡單的數組,其邏輯結構是線性表。要使用一維數組,需經過定義、初始化和應用等過程。

數組聲明

在數組的聲明格式里,「數據類型」是聲明數組元素的數據類型,可以是java語言中任意的數據類型,包括簡單類型和結構類型。「數組名」是用來統一這些相同數據類型的名稱,其命名規則和變數的命名規則相同。

數組聲明之後,接下來便是要分配數組所需要的內存,這時必須用運算符new,其中「個數」是告訴編譯器,所聲明的數組要存放多少個元素,所以new運算符是通知編譯器根據括弧里的個數,在內存中分配一塊空間供該數組使用。利用new運算符為數組元素分配內存空間的方式稱為動態分配方式。

舉例:

int[]x; //聲明名稱為x的int型數組

x=new int[10]; //x數組中包含有10個元素,並為這10個元素分配內存空間

在聲明數組時,也可以將兩個語句合並成一行,格式如下:

數據類型[]數組名= new 數據類型[個數];

利用這種格式在聲明數組的同時,也分配一塊內存供數組使用。如上面的例子可以寫成:

int[]x = new int [10];

等號左邊的int[]x相當於定義了一個特殊的變數x,x的數據類型是一個對int型數組對象的引用,x就是一個數組的引用變數,其引用的數組元素個數不定。等號右邊的new int[10]就是在堆內存中創建一個具有10個int型變數的數組對象。int[]x = new int [10];就是將右邊的數組對象賦值給左邊的數組引用變數。[5]

二維數組

定義

前面介紹的數組只有一個下標,稱為一維數組, 其數組元素也稱為單下標變數。在實際問題中有很多量是二維的或多維的, 因此C語言允許構造多維數組。多維數組元素有多個下標, 以標識它在數組中的位置,所以也稱為多下標變數。本小節只介紹二維數組,多維數組可由二維數組類推而得到。二維數組類型說明的一般形式是:

類型說明符數組名[常量表達式1][常量表達式2]…;

其中常量表達式1表示第一維下標的長度,常量表達式2 表示第二維下標的長度。例如:

int a[3][4]; 說明了一個三行四列的數組,數組名為a,其下標變數的類型為整型。該數組的下標變數共有3×4個,即:

a[0][0],a[0][1],a[0][2],a[0][3]

a[1][0],a[1][1],a[1][2],a[1][3]

a[2][0],a[2][1],a[2][2],a[2][3]

二維數組在概念上是二維的,即是說其下標在兩個方向上變化, 下標變數在數組中的位置也處於一個平面之中, 而不是象一維數組只是一個向量。但是,實際的硬體存儲器卻是連續編址的, 也就是說存儲器單元是按一維線性排列的。如何在一維存儲器中存放二維數組,可有兩種方式:一種是按行排列, 即放完一行之後順次放入第二行。另一種是按列排列, 即放完一列之後再順次放入第二列。在C語言中,二維數組是按行排列的。在如上中,按行順次存放,先存放a[0]行,再存放a[1]行,最後存放a[2]行。每行中有四個元素也是依次存放。由於數組a說明為

int類型,該類型占兩個位元組的內存空間,所以每個元素均佔有兩個 位元組(數組中每一格為一位元組)。

三維數組

三維數組,是指維數為三的數組結構。三維數組是最常見的多維數組,由於其可以用來描述三維空間中的位置或狀態而被廣泛使用。

三維數組就是維度為三的數組,可以認為它表示對該數組存儲的內容使用了三個獨立參量去描述,但更多的是認為該數組的下標是由三個不同的參量組成的。

數組這一概念主要用在編寫程序當中,和數學中的向量、矩陣等概念有一定的差別,主要表現:在數組內的元素可以是任意的相同數據類型,包括向量和矩陣。

對數組的訪問一般是通過下標進行的。在三維數組中,數組的下標是由三個數字構成的,通過這三個數字組成的下標對數組的內容進行訪問。

⑤ 假設三維數組A[10][9][8]按行優先順序存儲,若每個元素佔3個存儲單元,且首地址為100,則元素A[9][8][7]的

(9×(9*8)+8*7+7)×3+100
9×(9*8)是因為有9個9×8的二維數組
8*7+7對單個的二維數組計算
對吧

⑥ 關於數組的存儲位置

A[1,1,1]轉換成以0為基準的數組應該是a[2,1,4],第一維長度為5,第二維長度7,第三維長度為6,則A[1,1,1]應該是該數組的第2*5*7+2*5+7+4=91個元素,每個元素長度是5,則第91個元素的存儲位置為2000+(91-1)*5=2450

⑦ c 語言中,二維數組結構體和三維數組有什麼不同,他們的輸入儲存各在哪裡

C語言中,二維三維數組結構體基本是一樣的,一維數組,如a[3]在內存里這樣:
a[0]a[1]a[2]
二維a[2][3]就變成了 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
三維a[2][2][3] a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] a[0][1][2]....
不論如何都是線性存儲的, 因為內存可以抽象成線性的
其實C語言中的三維數組一般都是定義成一個指向二維數組的一維數組, 二維數組也一般定義成指向數組的數組

給你的簡單的例子:
(循環中)

// 增加內存區域 ---- 二維數組(只能增加, 沒做減少處理)
MayBe =(LONG **) realloc(MayBe, sizeof(LONG *) * (MBCount+1));
MayBe[MBCount] = (LONG *) malloc(sizeof(LONG)*10);

MayBe[MBCount][0] = x[0];
MayBe[MBCount][1] = x[1];
MayBe[MBCount][2] = x[2];
MayBe[MBCount][3] = x[3];
MayBe[MBCount][4] = x[4];
MayBe[MBCount][5] = x[5];
MayBe[MBCount][6] = x[6];
MayBe[MBCount][7] = x[7];
MayBe[MBCount][8] = x[8];
MayBe[MBCount][9] = x[9];
MBCount ++;

刪除:
for(i=0; i<MBCount; ++i)
if(MayBe[i]) free(MayBe[i]);
free(MayBe);

直接從我的一個程序中摳出來的:P

這里注意的是,不要把指針跟數組弄混了,雖然內存可以用數組的形式訪問,但他們實際上是不一樣的,數組比指針多一次定址操作.

⑧ 三維數組的存儲低下標優先存儲是以行優先還是列優先

以定義的順序為准。
如:
int a[2][2][2]={
{{1,2},{3,4}},
{{5,6},{7,8}},
}
這個數組中,a[1][2][1]的值為3

熱點內容
string函數java 發布:2024-05-02 20:36:49 瀏覽:801
phplinux伺服器 發布:2024-05-02 20:30:23 瀏覽:754
安卓在哪裡安裝網易官方手游 發布:2024-05-02 20:15:07 瀏覽:408
qq寵物的文件夾 發布:2024-05-02 20:13:46 瀏覽:366
做腳本掛 發布:2024-05-02 19:09:14 瀏覽:931
打王者開最高配置哪個手機好 發布:2024-05-02 19:08:31 瀏覽:351
python字典使用 發布:2024-05-02 19:01:14 瀏覽:134
我的世界伺服器聯機ip 發布:2024-05-02 18:50:39 瀏覽:619
steam密碼從哪裡看 發布:2024-05-02 18:50:00 瀏覽:629
convertlinux 發布:2024-05-02 18:20:00 瀏覽:705