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)