陣列(C語言)
陣列:一組具有相同型別資料的集合。
1、 一維陣列的建立
一維陣列的定義方式:type_t arr_name[ count ];
//type_t 陣列元素的型別
//arr_name 陣列名
//count 陣列元素的個數,是一個常量表達式
eg: int arr1[10];
float arr2[20];
double arr3[30];
注意:(1)、陣列名的命名規則和變數名的命名規則相同;
(2)、[ ] 中必須是常量,不可以是變數
eg:int count = 10;
int arr4[count]; //在這裡,count為整型變數,故陣列建立失敗。
2、一維陣列的初始化
初始化方式:
(1)、定義陣列時對陣列全部元素賦予初值;
eg: int arr1[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
(2)、定義陣列時只對一部分元素賦予初值;
eg: int arr2[10] = { 0, 1, 2, 3 }; //陣列有10個元素,前四個元素賦予了初值,其餘元素值為 0
(3)、若初始陣列元素都為 0
eg: int arr3[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int arr4[10] = { 0 }; //以上兩種均可實現,但一般情況下,我們會使用後一個定義方式。
(4)、對全部元素賦予初值,可不定義陣列大小
eg: int arr5[ ] = { 0, 1, 2, 3, 4}; //陣列有5個元素
注意:在定義字串時
3、一維陣列的使用
C語言規定只能逐個引用陣列元素,不可以一次引用整個陣列
使用形式:arr_name [ n ] ;
eg: int arr1[ 5 ] = { 0, 1, 2, 3, 4};
t = arr1[3]; //此時 t = 3;表示取陣列中下標為3 的元素,陣列中第一個元素的下標為 0 ,以此類推。
注意: 陣列的大小可通過計算得到
int arr2[ ] ={ 0, 1, 2, 3, 4};
int sz = sizeof(arr2) / sizeof(arr2[0]);
4、一維陣列在記憶體中的儲存
程式碼 結果
結論:陣列在記憶體中是連續存放的。
5、指標的初識
因在下面的內容中涉及到使用指標訪問陣列的知方法,故在這裡大致描述一下指標。
首先,看一下記憶體的編址:
(1)、記憶體中的每個記憶體單元對應一個地址;
(2)、在 32 位平臺上指標的大小為 4 個位元組,在 64 位平臺上指標的大小為 8 個位元組。
指標變數指存放一個地址的變數。
eg:int n = 10;
int *p = &n; //指標變數 p 存放的是 n 的地址
*p = 20; //所改變實質上是 n 的值
6、一維陣列的指標訪問
(1) 程式碼 結果
結論:陣列名就是陣列首元素的地址。
(2) 程式碼 結果
結論:陣列名+整數 i 運算 = 陣列下標為 i 的地址。
7、二維陣列的建立
與一維陣列的建立類似;
eg: int arr1[3][4];
double arr2[ ][4]; // 行可以省略,列不可以省略
8、二維陣列的初始化
與一維陣列的初始化類似;
eg: int arr1[3][4] = { { 1, 2, 3, 4 } , { 5, 6, 7, 8 } , { 9, 10, 11, 12 } };
int arr2[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
int arr3[3][4] = { { 3 }, { 5 }, { 9 } };
int arr4[3][4] = { { 3 }, { 0, 5 },{ 0, 0, 9}};
9、二維陣列的使用
與一維陣列一樣使用下標引用;
使用形式:arr_name[ i ][ j ]; //指下標為(i,j)的元素
eg: int arr1[3][4] = { { 1, 2, 3, 4 } , { 5, 6, 7, 8 } , { 9, 10, 11, 12 } };
printf("%d\n",arr1[2][1]); //輸出的值為10
10、二維陣列在記憶體中的儲存
程式碼 結果
結論:二維陣列在記憶體中的儲存也是連續的。
11、二維陣列的指標訪問
(1) 程式碼 結果
結論:陣列名就是陣列首元素的地址。
(2) 程式碼 結果
結論:陣列名+整數4* i +j 運算 = 陣列下標為 ( i , j) 的地址
12、有關陣列的運算
(1)、一維陣列
注:*&a 相當於 a
(2)、字元陣列
程式碼 結果
注:strlen()函式是用來求一個字串長度的。因為arr的結尾不是'\0',strlen()會繼續向後檢索,直到遇到'\0',而這些區域的內容是不確定的,故輸出的結果中不確定返回多少。
程式碼 結果
程式碼 結果
(3)、二維陣列
總結:sizeof(陣列名):這裡的陣列名錶示整個陣列;
& 陣列名 :這裡的陣列也表示整個陣列。
13、陣列作為函式引數
在寫程式碼時,在陣列作為引數的時候,實際上只是把陣列首元素的地址傳了過去,不會把整個陣列傳過去。
eg: void Max(int arr1[ ])
{
int sz = sizeof(arr1) / sizeof(arr1[0]);
}
分析:在上面這個例子中,int arr1[ ]表示一個指標,即 int *arr1;
所以我們會得到 sz = 1;而不能表示整個陣列元素的個數。
往往我們在使用陣列作為引數的時候,會選擇把陣列大小的相關內容傳過去(比如直接傳過去陣列元素的個數 或者 傳過去左右下標,用左右下標控制位置)。