C 基礎 陣列

2021-09-28 21:37:29 字數 3201 閱讀 3194

1、陣列的特點

2、陣列作為函式的形參

(1)、陣列有兩個性質:不允許拷貝陣列,以及使用陣列時會將其轉換成指標。因為不能拷貝陣列,所以無法以值傳遞的方式使用陣列引數。因為陣列會被轉換成指標,所以當為函式傳遞乙個陣列時,實際上傳遞的是指向陣列首元素的指標。

(2)、陣列的引用

// arr是乙個整型陣列的引用,該陣列具有10個整數

void f1(int (&arr)[10]);

(3)、指標和陣列

// 10個指標構成的陣列,陣列的元素型別是指標:int *

int *arr1[10];

// 指向含有10個整數的陣列的指標。

int (*arr2)[10];

3、一維陣列(1)、一維陣列定義方式(如下三種):

// 資料型別  陣列名 [ 陣列長度 ];

int a[10];

// 用常量來指定陣列的大小

int num1;

constexpr int num2;

int a[num1]; //錯誤,因為 num1 不是常量

int a[num2]; //正確,因為 num2 是常量

// 資料型別 陣列名 [ 陣列長度 ] = ;

int b[3] = ;

// 資料型別 陣列名 = ;

int c = ;

(2)、一維陣列名的用途

// 獲取陣列的長度

auto d=p-e; //結果為4

對應的型別如下圖所示

4、多維陣列

(1)、二維陣列定義(預設的元素用0來表示)

int a1[2][3];

int a2[2][3] = , };

int a3[2][3] = ;

int a4[3] = ;

(2)、使用範圍for來進行遍歷多維陣列時:除了最內層的迴圈外,其他的所有迴圈控制變數都應該是引用型別

#include#includeusing namespace std;

int main()

, };

for (auto &row : arr) // 除最內層外,其他的控制變數都要用引用的型別

cout << endl;

} cin.get();

}

因為:如果row不是引用型別,編譯器在初始化row時,會自動的將這些陣列形式的元素轉換成指向該陣列內首元素的指標。這樣row的型別就是 int * ,這樣內層迴圈就不合法了。

1、將陣列作為函式的形參,可以用指標或陣列名的形式來進行傳遞實參

// 以指標的形式,arr為陣列的首位址,len為陣列元素的個數

void printarray(int *arr , int len)

// 陣列名的形式,看起來更直觀。len為陣列元素的個數

void printarray(int arr , int len)

2、關於陣列的長度求解。

(1)、如果在傳遞陣列的時候只傳遞陣列名,此時在接受的函式中用 sizeof 將無法求得陣列的元素個數。實驗示例如下:

#include#includeusing namespace std;

// 只傳遞陣列名,在呼叫函式中求陣列長度

void printarray01(int *arr)

cout << "\n---------------------\n";

}int main()

; cout << "printarray01列印結果為:\n";

printarray01(a);

system("pause");

}

執行結果如下:

所以在子函式中用 sizeof(arr) / sizeof(arr[0])  來求陣列的元素時結果為1,因為該函式只接受了陣列的第乙個元素的位址。

引數的傳遞是將實參的值賦給形參。然而對於陣列來說卻是乙個例外,因為陣列的資料太多了,將其一一賦值既麻煩又浪費空間。所以陣列作為引數傳遞給函式時,只傳遞了陣列首元素的位址,函式在需要用到後面元素時再按照這個位址和陣列下標去查詢。也就是說後面的元素根本沒到函式裡來,所以在函式裡求不出陣列的大小也就不足為奇了。
(2)、為解決以上的問題,需要在定義陣列的地方,預先用 sizeof(arr) / sizeof(arr[0])  來求得陣列的元素個數。再將求得的陣列元素個數和陣列名一起傳遞給函式。例項如下

#include#includeusing namespace std;

// 在定義陣列的地方求得陣列的元素個數,再作為實參傳遞過來

void printarray02(int* arr, int len)

cout << "\n--------------------\n";

}int main()

; int len = sizeof(a) / sizeof(a[0]); // 預先求得陣列元素的個數

cout << "printarray02列印結果為:\n";

printarray02(a, len);

system("pause");

}

執行結果如下

C 陣列基礎

學習陣列 陣列在有些書裡面稱之為引用型別 更確切的說陣列是一種資料結構 using system namespace array 實際上我們int 他的原型是array 而int 能使用 foreach 的原因歸根結底為 array類實現了ienumrable這個介面 注意 初始化陣列的時候,要麼給...

C 陣列基礎

所謂陣列,是有序的元素序列。若將有限個型別相同的變數的集合命名,那麼這個名稱為陣列名。組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。用於區分陣列的各個元素的數字編號稱為下標。簡單來說,陣列是乙個容器,儲存相同型別的資料,並且容量是固定的。下面我們來簡單整理一下陣列的基本內容...

C 基礎 陣列

陣列是包含若干個相同型別的變數,這些變數都可以通過索引 從0開始 進行訪問。陣列中的變數稱為陣列的元素,陣列能夠容納元素的數量稱為陣列的長度。陣列中的每個元素都具有唯一的索引與其相對應。陣列是通過指定陣列的元素型別,陣列的維數及陣列每個維度的上限和下限來定義的,即乙個陣列的定義需要包含以下幾個要素。...