1,數組是有一系列相同元素構成的。
2,const int abc[MONTH] = {1,2,3,4,5,6,7}; // 需要在const聲明數組時對其進行初始化,因爲在聲明後,不能再對其進行賦值。
3,當使用空的方括號對數組進行初始化時,編譯器會根據列表中的數值來確定數組的大小。
確定數組的元素的個數:sizeof(abc)/sizeof(abc[0]);
C99對數組初始化增加了一些新特性,可以對某個元素專門初始化,例如:abc[6] = {abc[5] = 123};
還有,如果在一個指定初始化項目後跟有不止一個值,則這些數值經用來對後續的數組元素初始化;第二,如果多次對一個元素初始化,則最後一次有效。
爲數組賦值:
C不支持把數組作爲一個整體來賦值,也不支持用花括號括起來的列表形式進行賦值(初始化的時候除外)。
#define SIZE 5
int oxen[SIZE] = {1,3,4,5}; //可以的
int yaks[SIZE];
yaks = oxen; //不允許
yake = oxen; //不允許
yake[SIZE] = oxen[SIZE]; /不正確
yake[SIZE] = {1,3,4,5}; //不起作用
編譯器不檢查索引的合法性。
數組名也是該數組首元素的地址;
例如:
#include <stdio.h> #define MONTH 12 int main(void) { int days[MONTH] = {31,28,31,30,31,30,31,31,30,31,30,31}; int index; for(index = 0;index < MONTH;index++) printf("month %d has %d days.\n",index + 1,*(days + index); return 0; } /* 與days[index]相同 */
函數原型:就是函數聲明,函數原型不是必須的,如果函數定義在這個函數使用之前,那麼就不需要函數原型,也就是函數聲明。因爲函數原型是一條語句,所以要加分號,函數原型包括函數的返回值類型,函數名,參數列表,還有一點就是函數原型一定要與函數定義一致,否則後果不堪設想,哈哈。
函數,數組,指針:
int sum(int * ar,int n) //更通用的做法
這裏的第一個參數把數組地址和數組類型傳給了第一個參數,第二個參數傳的是數組元素的個數。
只有在函數原型和函數定義頭中,ar[] 和*ar 纔可以互換。
無論任何情況,int *ar永遠代表ar是指向int 的指針。ar[]也可以表示ar是指向int的指針,但必須是在函數聲明或是函數定義頭當中纔可以。
所以以下都是等價的:
int abc[char * pr,int n);
int abc[char pr[],int n);
int abc[char *,int);
int abc[char [],int);
如果在函數定義中,這樣就是等價的:
int abc[char * pr,int n)
int abc[char pr[],int n)