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)