① 數組的大小數組中能夠存放多少個數組元素
這個問題 應該這么說:如果定義的是一個簡單類型的數組,例如:int my_int_array[100] ; 那麼最多能夠存放:100個元素,且每個元素的詳細大小為:sizeof(int) ;數組的合法存取下標為:my_int_array[0] -- my_int_array[99],如果超過了這個范圍,那麼就會產生數組越界,程序就會出現錯誤了。
如果定義的是一個復合類型的數組,例如:結構數組。舉例如下:
struct myself_datatype
{
char name[40] ;
int sex ;
int age ;
} myself_data ;
myself_data my_struct_array[100] ;
那麼結構數組中的每一個元素所佔的空間大小就是:sizeof(myself_data.name) + sizeof(myself_data.sex) + sizeof(myself_data.age) 。
② 在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]第二列
③ 能詳細描述一下順序存儲的數組元素的存放地址的計算方法嗎
假設數組各維的下界是不是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)數組A的存儲量為6*8*6=288位元組
(2)按行優先存放時,元素A1,4的起始地址、存儲地址:1000+(1*8+4)*6=1072
(3)按列優先存放時,元素A4,7的起始地址、存儲地址:1000+(7*6+4)*6=1276
數組元素的存儲地址就是該元素在內存的起始地址
⑤ 一維數組在內存中的存放方式是怎麼樣的
一維數組在內存中的存放方式是:
1、硬碟上不可能運行程序的,必須在內存中運行。
2、低地址到高地址存儲 。
3、數組元素通常也稱為下標變數。
4、在C語言中,只能逐個地使用下標變數, 不能用一個語句輸出整個數組。
5、int a[10]和t=a[6]分別是定義數組長度為10和引用a數組中序號為6的元素,6不代表數組長度。
(5)數組存儲元素擴展閱讀:
數組(Array)是有序的元素序列。若將有限個類型相同的變數的集合命名,那麼這個名稱為數組名。組成數組的各個變數稱為數組的分量,也稱為數組的元素,有時也稱為下標變數。用於區分數組的各個元素的數字編號稱為下標。數組是在程序設計中,為了處理方便, 把具有相同類型的若干元素按有序的形式組織起來的一種形式。 這些有序排列的同類數據元素的集合稱為數組。
數組是用於儲存多個相同類型數據的集合。
在C語言中, 數組屬於構造數據類型。一個數組可以分解為多個數組元素,這些數組元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分為數值數組、字元數組、指針數組、結構數組等各種類別。
⑥ 什麼是數組數組元素與存儲單元的對應關系是怎樣的
數組就是存儲一堆數據的存儲結構。(可是是整數,可以是字母,甚至,多元數組還可以存儲字元串)
數組里的元素是連續的。所以相鄰的存儲單元的存儲地址是連著的。
這也是後面為什麼指針可以來代替數組處理問題的原因。
比如a[0]和a[1]的存儲單元地址是連續的
⑦ 二維數組元素在內存中的存放順序是
二維數組元素在內存中的存放順序是按行存放。
當進行數據的存取時,在無x的條件下不可能取出值。但是在沒有y的條件下,可以通過地址取出x行的某個值。當知道x的值,代表能確定這一行的首地址,因為二維數組按照行存放,所以第x行的數據地址關系排列遞增的。
如果二維數組按列存放,則知道y值,可以確定首地址的值,去進行值得存取。顯然由於C語言不支持這樣的方式,所以C語言中二維數組按照行存放。
(7)數組存儲元素擴展閱讀
常用的二維數組的表示方法
第一種是普通的二維數組的表示方法。
第二種是用一維數組來表示二維數組,從顯示的元素地址可以看出,二維數組和一維數組表示的二維數組在內存中的儲存方式其實是一樣的,不過使用二維數組看起來要簡單些,只要不用進行地址轉換。
第三種表示是用指針數組。這種方法對各個元素大小不一樣的情況下比較適用。
第四種方式為用指向指針的變數來表示。此種方式p是指向指針的指針,不能把普通的二維數組的首地址賦給它,可以把第三種方式中的數組指針的首地址賦給它,這種方式用的較少。