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開始 進行訪問。陣列中的變數稱為陣列的元素,陣列能夠容納元素的數量稱為陣列的長度。陣列中的每個元素都具有唯一的索引與其相對應。陣列是通過指定陣列的元素型別,陣列的維數及陣列每個維度的上限和下限來定義的,即乙個陣列的定義需要包含以下幾個要素。...