1、数组声明时清空
int main()
{
int a[5] = {0}; //清空
int i = 0;
for(i = 0 ; i< 5 ; i++)
printf("[%d]",a[i]); # [0][0][0][0][0]
printf("\n");
return 0;
}
int main()
{
int a[5] = {1}; //从第二位开始清空
int i = 0;
for(i = 0 ; i< 5 ; i++)
printf("[%d]",a[i]); # [1][0][0][0][0]
printf("\n");
return 0;
}
2、不指明元素个数的申明
int main()
{
int a[] = {1,2,3,4};
int count = sizeof(a)/sizeof(int);
printf("count:%d\n",count); # count:4 ,编译器隐形设置为4个元素
return 0;
}
int main()
{
char a[] = "strlen(a)=13";
int count = sizeof(a); #13,隐形设置为13位的字符串,最后一位为'\0'
printf("count:%d\n",count);
return 0;
}
3、数组作为函数形参
PS:在形参中定义数组时在数组名后面跟一个空的方括号,有时为了在被调用函数中处理数组元素的需要,可以另设一个参数,传递需要处理的数组元素的个数
int average(int arr[],int n)
//int average(int arr[5],int n) 传入arr[5]没有意义,因为C编译器对形参数组大小不做检查,只是检查实参数组的首地址传给形参数组。
{
int i=0,ave = 0;
for(i=0;i<n;i++)
{
ave += arr[i];
}
ave /= n;
return ave;
}
void show(int arr[])
{
//此时arr地址=实参a[5]的首地址(固定的),arr在执行过程中是可变的
printf("[%d]",*arr); arr++;
printf("[%d]",*arr);
}
int main()
{
int a[5] = {2,3,4,5,6};
int b = average(a,5);
printf("b:%d\n",b); //b:4
a++; //无法编译通过,数组首地址是不能变的
show(a);
return 0;
}