1,數組是有一系列相同元素構成的。數組
2,const int abc[MONTH] = {1,2,3,4,5,6,7}; // 須要在const聲明數組時對其進行初始化,由於在聲明後,不能再對其進行賦值。ide
3,當使用空的方括號對數組進行初始化時,編譯器會根據列表中的數值來肯定數組的大小。函數
肯定數組的元素的個數:sizeof(abc)/sizeof(abc[0]);
指針
C99對數組初始化增長了一些新特性,能夠對某個元素專門初始化,例如:abc[6] = {abc[5] = 123};索引
還有,若是在一個指定初始化項目後跟有不止一個值,則這些數值經用來對後續的數組元素初始化;第二,若是屢次對一個元素初始化,則最後一次有效。原型
爲數組賦值:編譯器
C不支持把數組做爲一個總體來賦值,也不支持用花括號括起來的列表形式進行賦值(初始化的時候除外)。it
#define SIZE 5io
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)