陣列的宣告、初始化、賦值
阿新 • • 發佈:2019-02-12
一、陣列的宣告
#include<stdio.h>
int main(){
float candy[365];//通過宣告告訴編譯器陣列元素的個數和型別
char code[12];//內含12個char型別元素的陣列
int states[50];//內含50個int型別元素的陣列
/*陣列的編號從0開始,因此candy[0]代表陣列第一個元素
candy[364]代表陣列的第365個元素*/
return 0;
}
二、陣列的初始化(對於自動儲存型別【陣列在函式內部宣告且宣告時未使用關鍵字static】必須先初始化,才能使用,對於一些其他的儲存類別的變數和陣列,若宣告時未初始化,編譯器會自動把他們的值設為0)
#include<stdio.h> #define SIZE 4 int main(){ /*完全初始化*/ int powers[8]={1,2,4,8,16,32,64}; /*部分初始化*/ int some_data[SIZE]={12,13};//推薦使用符號常量SIZE表示陣列大小 /*省略方括號裡的數字,讓編譯器自動匹配陣列大小和初始化列表中的項數*/ const int days[]={31,28,31,30,31};//針對這樣的陣列的大小用sizeof(days)/sizeof(days[0])來計算更合適 for(int i=0;i<SIZE;i++){ printf("%2d%14d\n",i,some_data[i]);//如果部分初始化,剩餘元素就會被初始化為0 } for(int i=0;i<sizeof days/sizeof days[0];i++){ printf("%2d %d\n",i+1,days[i]); } return 0; }
三、使用初始化器
#include<stdio.h>
#define MONTHS 12
int main(){
int days[MONTHS]={31,28,[4]=31,30,31,[1]=29};/*下標為4,即第五個元素指定賦值為31,
那麼後面的值也隨之被初始化為30,31,days[1]由於後面被初始化為29,覆蓋了之前初始化為28 */
int i;
for(i=0;i<MONTHS;i++){
printf("%2d %d\n",i+1,days[i]);
}
return 0;
}
四、陣列的賦值
/*陣列元素的賦值*/ #include<stdio.h> #define SIZE 5 int main(){ int a[SIZE]={2,3,4,5,6};//正確的初始化 int b[SIZE]; b=a;/*C不允許把陣列作為一個單元賦給另一個數組*/ b[SIZE]=a[SIZE];/*陣列下標越界,確保陣列下標在0~SIZE-1的範圍內*/ b[SIZE]={5,6,8,2};/*除初始化之外,不允許使用花括號列表的形式賦值*/ b[0]=1;//正確的賦值 b[1]=2; printf("%d %d",b[0],b[1]); return 0; }
五、指定陣列的大小
#include<stdio.h>
int main(){
float b[0];//不允許這樣,陣列大小必須大於0
float c[2.5];//不允許,陣列大小必須為整數
double m[(int)2.5];//可以,被強制轉化為整數
float d[2*3+1];//可以
float e[sizeof(int)+1];//可以
int n;
scanf("%d",&n);
int a[n];//C99允許這樣
printf("%d\n",sizeof(a));
return 0;
}