### 數組
數組可以代表內存中一組連續的同類型存儲區。
數字也需要先聲明然后才使用。
聲明數組時需要提供類型名稱,數組名稱和一個整數代表數組里的存儲區個數。
數組一旦創建成功,它里面包含的存儲區個數就不可改變。
/*
數組聲明演示
*/
#include <stdio.h>
int main(){
int arr[5];
return 0;
}
數組通常不作為整體使用,一次只能使用其中的某個存儲區。
數組里每個存儲區都有一個編號,這個編號叫做存儲區的下標。
第一個存儲區的下標是0,向后一次遞增。
有效下標范圍從0開始到存儲區個數減一為止,超過范圍的下標不能使用。
數組名稱結合下標就可以表示數組里的存儲區。
/*
數組聲明演示
*/
#include <stdio.h>
int main(){
int arr[5];
arr[2] = 10;
return 0;
}
可以編寫for循環依次處理數組里的每個存儲區。
在這個for循環里讓循環變量依次代表數組中每個存儲區的下標。
#include <stdio.h>
int main(){
int arr[5];
int num = 0;
for (num = 0;num <= 4;num++){
arr[num] = num;
}
for (num = 4;num >= 0;num--){
printf("%d ", arr[num]);
}
printf("\n");
return 0;
}
數組也應該初始化。
數組初始化的時候,需要提供多個初始化數據,每個初始化數據用來初始化一個存儲區。
所有初始化數據寫在一對大括號里面,相鄰數據之間用逗號分隔。
#include <stdio.h>
int main(){
int arr[5] = {0, 1, 2, 3, 4};
return 0;
}
如果初始化數組比存儲區個數多的話,就會把多余的數據丟掉。
如果初始化數據比存儲區個數少,就把后面多余的存儲區初始化成0。
如果初始化數據個數和存儲區個數一樣就可以省略數組聲明里的存儲區個數。
#include <stdio.h>
int main(){
int arr[] = {0, 1, 2, 3, 4};
return 0;
}
### 變長數組
C99規范里允許聲明數組時使用變量表示數組里的存儲區個數,這種數組叫變長數組。
如果程序多次運行則每次運行時數組里包含的存儲區個數都可能不同。
在一次運行過程中數組里包含的存儲區個數不會改變。
/*
變長數組演示
*/
#include <stdio.h>
int main(){
int size = 0;
printf("請輸入一個整數:");
scanf("%d", &size);
int arr[size]; // 變長數組
printf("sizeof(arr) = %ld\n", sizeof(arr));
return 0;
}
可以使用sizeof關鍵字計算變長數組的總字節個數。
變長數組不可初始化。
### 多維數組
多維數組除了可以表示多個存儲區以外,還可以表示這些存儲區的分組情況。
最常見的多維數組叫二維數組,它只能表示存儲區的一次分組情況。
聲明二維數組的時候,需要提供倆整數,第一個整數表示分組個數,第二個整數表示每組里存儲區個數。
/*
二位數組演示
*/
#include <stdio.h>
int main(){
int arr[3][2]; // 二維數組聲明
return 0;
}
二維數組通常不會作為整體使用,一次只會使用其中的某個存儲區。
二維數組名稱和兩個下標就可以就可以用來表示其中的某個存儲區,第一個下標表示分組標號(組下標),第二個下標表示分組內存儲區的編號(組內下標)。
組下標范圍從0開始到分組個數減一為止。
組內下標范圍從0開始到組內存儲區個數減一為止。
將0-5加入到二維數組里面:
/*
二位數組演示
*/
#include <stdio.h>
int main(){
int arr[3][2]; // 二維數組聲明
int row = 0, col = 0, tmp = 0;
for (row = 0;row <= 2;row++){
for (col = 0;col <= 1;col++){
arr[row][col] = tmp;
tmp++;
}
}
printf("%d\n", arr[2][1]);
return 0;
}
可以采用多重循環依次處理二維數組里的每個存儲區。
可以把二維數組當一維數組進行初始化。
也可以把初始化數據進行分組,每組初始化數據用來初始化一組存儲區。
使用初始化一維數組的方式初始化二維數組
int arr[3][2] = {0, 1, 2, 3, 4, 5};
使用分組初始化的方式初始化二維數組
int arr[3][2] = {{0, 1}, {2, 3}, {4, 5}};
如果可以根據初始化數據的個數計算出分組個數,就可以省略二維數組聲明中的分組個數。
int arr[][2] = {{0, 1}, {2, 3}, {4, 5}};
二維數組名稱也可以代表數組里第一個存儲區的地址。
二維數組名稱不能代表存儲區,所以不可以被賦值
/*
二維數組演示
*/
#include <stdio.h>
int main(){
int arr[3][2] = {0};
printf("arr = %p\n", arr);
printf("&arr[0][0] = %p\n", &arr[0][0]);
return 0;
}
可以對二維數組名稱采用sizeof進行計算,結果是二維所包含的總字節個數。
#include <stdio.h>
int main(){
int arr[3][2] = {0};
printf("sizeof(arr) = %ld\n", sizeof(arr));
return 0;
}
二維數組名稱可以和一個下標配合使用,這個下標當作組下標看待,這個寫法可以表示下標代表組中的第一個存儲區。