C 中的陣列(array)

2021-09-08 19:37:51 字數 3551 閱讀 2359

原文 c# 中的陣列(array)

陣列是乙個無序的元素序列。陣列元素儲存在乙個連續性的記憶體塊中,並可使用乙個整數索引來訪問。

c# 宣告陣列變數時,陣列的大小不是宣告的一部分。這點與c/c++有些區別。

int dogs; // 宣告陣列 // 宣告時不需要指定陣列的大小
只有在實際建立陣列例項的時候,才需要指定陣列的大小。建立陣列例項時編譯器預設將陣列元素初始化為0,null,false(依元素型別不同)。

pins = new int[4];  // 只有在實際建立陣列例項的時候,才需要指定陣列的大小。
以上兩個語句執行後結果如下:

陣列例項的大小不一定是常量,它可以在執行時計算。

int size = int

.parse(console.readline());

int pins = new

int[size];

某些情況下,陣列大小可能為 0,這個設計是有意義的。大小為 0 的陣列不是乙個 null(空)陣列。除了基本資料型別,陣列元素還可以是結構、列舉或者類。

大括號中的值不一定是常量,它們可以是在執行時計算的值。

random r = new random();  

int pins = new int[4];

初始化陣列變數。大括號中的值的數量必須和要建立的陣列例項的大小完全匹配!

int pins = new int[3] ;     // 編譯時錯誤  

int pins = new int[4] ; // 編譯時錯誤

int pins = new int[4] ; // 正確

初始化乙個陣列變數時,實際上可省略 new 表示式和陣列的大小,編譯器將根據初始值的數量來計算大小。

int pins = ;    // 正確
建立乙個由結構構成的陣列時,為了初始化陣列的每個結構,可以呼叫結構構造器。

struct time  

} time schedule = ; // 呼叫自定義的結構構造器

匿名類(anonymous class)是乙個沒有名字的類,只能包含 public 字段,字段必須全部初始化,不可以是 static 字段,而且不能在其中指定方法。

可以建立隱式型別的陣列。如果在宣告陣列的時候指定了乙個初始值列表,就可以讓 c# 編譯器自己推斷陣列中的元素的型別。

var names = new; // c# 推斷 names 是乙個 string 型別  

console.writeline(names[0]);

console.writeline(names[3]);

// 隱式型別轉換的陣列尤其適用於匿名型別

var people = new,

new ,

new ,

new };

// 陣列中的每個元素都是匿名型別

// 並且每個元素都必須指定相同的匿名型別

訪問及遍歷陣列有如下方法,**如下:

using system;  

using system.collections.generic;

using system.linq;

using system.text;

namespace arraytype

; console.writeline(names[0]);

console.writeline(names[3]);

console.writeline();

console.writeline("用 for 遍歷字串陣列");

for (int i = 0; i < names.length; i++)

// length 是屬性而不是方法,不要加 '()'

console.writeline();

console.writeline("用 foreach 遍歷 string 陣列");

// foreach 是遍歷陣列的首選方式

foreach(string name in names)

var people = new,

new ,

new ,

new };

console.writeline();

console.writeline("用 foreach 遍歷 var 陣列");

foreach(var person in people)

console.writeline();

console.writeline("用 foreach 遍歷 var 陣列");

foreach (var person in people)

, age: ", person.name, person.age);

} console.writeline();

} }

}

複製陣列有如下方法,但只有最後一種是真正的複製。

int pins = ;  

int copy = new int[pins.length];

pins.copyto(copy, 0); // 將陣列 pins 的內容複製到陣列 copy

// copyto 是淺拷貝,從指定位置開始複製,複製後兩個陣列都引用同一組物件

int pins = ;

int copy = new int[pins.length];

array.copy(pins, copy, copy.length); // copy 方法是淺拷貝

int pins = ;

int copy = (int)pins.clone(); // clone 方法是淺拷貝

// clone 放回的是乙個 object,所以必須進行型別準換

int pins = ;

int copy = new int[pins.length];

for (int i = 0; i < copy.length; i++)

陣列的維數是沒有限制的,可以建立多維陣列。

string[,] stars = new string[6,8];  // 建立二維陣列,6 行 8 列  

stars[2, 6] = "mars"; // 將單元格(2, 6)的元素設為 mars

// 使用多維陣列時,要準備好捕捉並處理 outofmemoryexception

C 中的陣列(array)

陣列是乙個無序的元素序列。陣列元素儲存在乙個連續性的記憶體塊中,並可使用乙個整數索引來訪問。宣告陣列變數時,陣列的大小不是宣告的一部分。int dogs 宣告陣列 宣告時不需要指定陣列的大小只有在實際建立陣列例項的時候,才需要指定陣列的大小。建立陣列例項時編譯器預設將陣列元素初始化為0,null,f...

c 中的array陣列和vector陣列

我覺得實驗一下會記得比較牢,話不多直接上 下面是array陣列,感覺用的不多。cpp 風格陣列 array include include include using namespace std intmain for int i 0 i myint.size i size 獲取長度,vector也...

js 中的陣列Array

1 ecmascript 中的陣列與其他語言中的陣列有些不同,ecmascript中的陣列可以每一項都不同型別,陣列的大小可以動態調整。var colors new array var colors new array 20 var colors new array red blue green v...