D編程語(yǔ)言提供了一種數(shù)據(jù)結(jié)構(gòu),數(shù)組用于存儲(chǔ)相同類(lèi)型的元素的一個(gè)固定大小的連續(xù)集合。數(shù)組是用于存儲(chǔ)數(shù)據(jù)的集合,但它往往認(rèn)為陣列為相同類(lèi)型的變量的集合。
相反聲明個(gè)別變數(shù),如number0, number1, ..., 和number99,聲明一個(gè)數(shù)組變量,如使用數(shù)字numbers[0], numbers[1], 和..., numbers[99]來(lái)表示各個(gè)變量。在數(shù)組中的特定元素是通過(guò)索引來(lái)訪問(wèn)。
所有陣列組成的連續(xù)的存儲(chǔ)單元。最低的地址對(duì)應(yīng)于所述第一元素,而最高地址的最后一個(gè)元素。
在D編程語(yǔ)言聲明數(shù)組,程序員指定的元素和如下由陣列所需元素的數(shù)量的類(lèi)型:
type arrayName [ arraySize ];
這就是所謂的單維數(shù)組。arraySize必須是整數(shù)常量大于零且類(lèi)型可以是任何有效的D編程語(yǔ)言數(shù)據(jù)類(lèi)型。例如,要聲明一個(gè)10個(gè)元素的數(shù)組為double類(lèi)型,使用此語(yǔ)句:
double balance[10];
可以初始化D編程語(yǔ)言的數(shù)組元素或者一個(gè)接一個(gè),或使用一個(gè)單獨(dú)的語(yǔ)句如下:
double balance[5] = [1000.0, 2.0, 3.4, 17.0, 50.0];
方括號(hào)內(nèi)[]的值的個(gè)數(shù)在右邊不能比,我們的聲明方括號(hào)[]之間的數(shù)組元素的個(gè)數(shù)較大。下面是一個(gè)示例來(lái)指定數(shù)組的單個(gè)元素:
如果省略數(shù)組的大小,創(chuàng)建數(shù)組的大小剛好能容納初始化。因此,如果編寫(xiě):
double balance[] = [1000.0, 2.0, 3.4, 17.0, 50.0];
將創(chuàng)建完全相同的數(shù)組,和在前面的例子中那樣。
balance[4] = 50.0;
上述聲明數(shù)組的值50.0在指定元素?cái)?shù)第5位。與第四索引數(shù)組將是第五次,即最后一個(gè)元素,因?yàn)樗械臄?shù)組都是讓 0作為他們的第一個(gè)元素,也被稱(chēng)為基本索引的索引。以下是我們上面討論的相同陣列的圖案表現(xiàn)出來(lái):

元素是由索引數(shù)組名訪問(wèn)。這是通過(guò)將一個(gè)元素的索引數(shù)組的名稱(chēng)之后方括號(hào)內(nèi)進(jìn)行。例如:
double salary = balance[9];
上面的語(yǔ)句將第10元素從數(shù)組并賦值給變量salary。下面是一個(gè)例子,這將使用所有上述三個(gè)概念即:聲明,賦值和訪問(wèn)數(shù)組:
import std.stdio; void main() { int n[ 10 ]; // n is an array of 10 integers // initialize elements of array n to 0 for ( int i = 0; i < 10; i++ ) { n[ i ] = i + 100; // set element at location i to i + 100 } writeln("Element Value"); // output each array element's value for ( int j = 0; j < 10; j++ ) { writeln(j," ",n[j]); } }
讓我們編譯和運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:
Element Value 0 100 1 101 2 102 3 103 4 104 5 105 6 106 7 107 8 108 9 109
當(dāng)在程序被寫(xiě)入所指定的數(shù)組的長(zhǎng)度,該陣列是一個(gè)靜態(tài)數(shù)組。當(dāng)長(zhǎng)度可以在程序的執(zhí)行過(guò)程中發(fā)生變化,該陣列是一個(gè)動(dòng)態(tài)數(shù)組。
定義動(dòng)態(tài)數(shù)組不是定義固定長(zhǎng)度的陣列,因?yàn)槭÷蚤L(zhǎng)度使得一個(gè)動(dòng)態(tài)數(shù)組簡(jiǎn)單:
int[] dynamicArray;
| 屬性 | 描述 |
|---|---|
| .init | 靜態(tài)數(shù)組返回一個(gè)數(shù)組字面量的字面即數(shù)組元素類(lèi)型。初始化屬性中的每個(gè)元素。 |
| .sizeof | 靜態(tài)數(shù)組返回?cái)?shù)組的長(zhǎng)度乘以每個(gè)數(shù)組元素的字節(jié)數(shù),而動(dòng)態(tài)數(shù)組返回動(dòng)態(tài)數(shù)組的引用,在32位版本大小為8,在64位版本的大小為16。 |
| .length | 靜態(tài)數(shù)組返回,而動(dòng)態(tài)數(shù)組是用來(lái)獲取/設(shè)置數(shù)組中的元素個(gè)數(shù)數(shù)組中元素的個(gè)數(shù)。長(zhǎng)度的類(lèi)型為size_t。 |
| .ptr | 返回一個(gè)指向數(shù)組的第一個(gè)元素。 |
| .dup | 創(chuàng)建同樣大小的動(dòng)態(tài)數(shù)組及數(shù)組中的內(nèi)容復(fù)制到其中。 |
| .idup | 創(chuàng)建同樣大小的動(dòng)態(tài)數(shù)組及數(shù)組中的內(nèi)容復(fù)制到其中。該副本的類(lèi)型為是不可變的。 |
| .reverse | 在當(dāng)前位置倒轉(zhuǎn)數(shù)組中的元素的順序。返回?cái)?shù)組。 |
| .sort | 在這里各種陣列中的元素的順序。返回?cái)?shù)組。 |
下面的例子說(shuō)明可用于數(shù)組的各種屬性。
import std.stdio; void main() { int n[ 5 ]; // n is an array of 5 integers // initialize elements of array n to 0 for ( int i = 0; i < 5; i++ ) { n[ i ] = i + 100; // set element at location i to i + 100 } writeln("Initialized value:",n.init); writeln("Length: ",n.length); writeln("Size of: ",n.sizeof); writeln("Yiibaier:",n.ptr); writeln("Duplicate Array: ",n.dup); writeln("iDuplicate Array: ",n.idup); n = n.reverse.dup; writeln("Reversed Array: ",n); writeln("Sorted Array: ",n.sort); }
讓我們編譯和運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:
Initialized value:[0, 0, 0, 0, 0] Length: 5 Size of: 20 Yiibaier:7FFF5A373920 Duplicate Array: [100, 101, 102, 103, 104] iDuplicate Array: [100, 101, 102, 103, 104] Reversed Array: [104, 103, 102, 101, 100] Sorted Array: [100, 101, 102, 103, 104]
D編程允許多維數(shù)組。這里是一個(gè)多維數(shù)組聲明的一般形式為:
type name[size1][size2]...[sizeN];
例如,下面的聲明創(chuàng)建一個(gè)三維: 5 . 10 . 4整數(shù)數(shù)組:
int threedim[5][10][4];
多維數(shù)組的最簡(jiǎn)單的形式是二維陣列。二維陣列在本質(zhì)上是一維陣列的列表。聲明大小為x,y的二維整型數(shù)組,編寫(xiě)如下:
type arrayName 上一篇:D語(yǔ)言決策語(yǔ)句下一篇:D語(yǔ)言sizeof運(yùn)算符