陣列由資料型別相同的一系列元素組成。需要使用陣列時,通過宣告陣列告訴編譯器陣列中內含多少元素和這些元素的型別。編譯器根據這些資訊正確地建立陣列。普通變數可以使用的型別,陣列元素都可以用。考慮下面的陣列宣告:
/* 一些陣列宣告 */
intmain
(void
)
若要訪問陣列中的元素,通過使用陣列下標數(也叫做索引)表示陣列中的各個元素
#include
"stdio.h"
#define months 12
intmain()
;int index;
for(index=
0;index)printf
("\n month %2d has %2d days."
,index+
1,days[index]);
return
520;
}
當然這個程式還不夠完善,它所表示的只是平年每個月的天數,至於程式的完善希望讀者可以拿來練手這種初始化方法。
#include
"stdio.h"
#define months 12
intmain()
//初始化完成
for(index=
0;index)printf
("\n month %2d has %2d days."
,index+
1,days[index]);
return
520;
}
當然這個程式中也會有許多小瑕疵,比如使用者輸入的內容萬一不是整數型別怎麼辦,這時請大家看我的另一篇文章,講述如何實現scanf的優化。
c99增加了乙個新特性:指定初始化器( designated initializer)。 利用該特性可以初始化指定的陣列元素。例如,只初始化陣列中的最後乙個元素。對於傳統的c初始化語法,必須初始化最後乙個元素之前的所有元素,才能初始化它:
int arr[6]
=;// 傳統的語法
而c99規定,可以在初始化列表中使用帶方括號的下標指明待初始化的元素:
int arr[6]
=;//把arr[5]初始化為212
對於一般的初始化,在初始化-乙個元素後,未初始化的元素都會被設定為0。
**例項:
#include
#define months 12
intmain()
;int i;
for(i=
0;i)printf
("\n %2d %d"
,i+1
,days[i]);
return0;
}
該程式在支援c99編譯器中輸出如下:
1 31
2 28
3 30
4 05 31
6 07 0
8 09 0
10 0
11 0
12 0
這裡我們著重看幾個常見的錯誤賦值
#define size 5
intmain()
;/*初始化沒問題*/
int yaks[size]
; yaks=oxen;
/*不允許*/
yaks[size]
=oxen[size]
;/*陣列下標越界*/
yaks[size]=;
/*不起作用*/
}
這些錯誤是因為c不允許把陣列作為乙個單元賦給另乙個陣列,除初始化以外也不允許使用花括號列表的形式賦值。
int n=5;
int m=8;
float al[5]
;//可以
float a2[5*
2+1]
//可以
float a3[
sizeof
(int)+
1];//可以
float a4[-4
]//不可以 陣列大小必須大於0
float a5[0]
;//不可以
float a6[
2.5]
;//不可以
float a7[
(int
)2.5
]//可以
float a8[n]
;//c99之前不允許;
過兩天來更新多維陣列的知識總結。 陣列指標和指標陣列
陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...
陣列指標和指標陣列
一 定義 陣列指標 陣列指標 是指向陣列 首元素的位址的 指標,其本質為指標 這個指標存放的是陣列首位址的位址,相當於2級指標,這個指標不可移動 指標陣列 陣列元素為指標的陣列,其本質為陣列。二 舉例 int a 3 4 這個無需多說,就是乙個 二維陣列 int p 4 就相當於int p 4 它就...
陣列指標和指標陣列
這兩個名字不同當然所代表的意思也就不同。我剛開始看到這就嚇到了,主要是中文太博大精深了,整這樣的簡稱太專業了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。指標陣列 array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標 陣列指標 a pointer to an ar...