1. 程式人生 > >陣列的宣告、初始化、賦值

陣列的宣告、初始化、賦值

一、陣列的宣告

#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;
}