1. 数组基本用法。
查看菜鸟教程:http://www.runoob.com/cprogramming/c-arrays.html
2. 易错难点
(1)数组名和指针区别。
- 数组名就是一个指向数组首地址的常量指针,一经定义,不可更改,其类型与数组首元素的地址相同(但是是常量指针)。
int arrn[5]={1,2,3,4,5};
int *p;
p=&arrn[0];
printf("&arrn[0]=%d\n",&arrn[0]);//数组首元素地址
printf("arrn=%d\n",arrn);//数组名=指向数组首元素常量地址
printf("p=%d\n",p);
printf("*arrn=%d\n",*arrn);
printf("*p=%d\n",*p);
printf("arrn+1=%d\n",arrn+1);
printf("p+1=%d\n",p+1);
printf("*(arrn+1)=%d\n",*(arrn+1));
printf("*(p+1)=%d\n",*(p+1));
- 当出现sizeof,和&操作符时,数组名不再当成指向首元素的常量指针来使用,而是包括一组数据结构的变量。
printf("sizeof(arrn)=%d\n",sizeof(arrn));
printf("sizeof(p) =%d\n\n",sizeof(p));
printf("&arrn+1=%d\n",&arrn+1);
printf("&p+1 =%d\n",&p+1);
- 数组名作为函数形参时相当于指向首地址的常量指针,那么指针变量只会包含数组的地址信息,而对数组的长度一无所知,相当于指针丢失了一些信息。我们把这种信息的丢失称为退化。只要把数组变量传递给函数,数组免不了退化为指针,所以,把数组传递给函数,需要明确的指明数组的大小。
int sum(int arrn[],int n)//int arrn[]相当于传递数组首元素地址,相当与int sum(int *arrn,int n)
{
int nSum=0;
for (int i=0;i<n;i++)
{
nSum+=arrn[i];
}
return nSum;
}
int arrn[5]={1,2,3,4,5};
int nSum=sum(arrn,5);
printf("nSum=%d\n",nSum);
nSum=15
.