首先看一个例子:
#include<stdio.h>
void test(int a[10]);
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d\n",sizeof(a)); //40
test(a);
return 0;
}
void test(int a[10]) // int * a;
{
printf("%d\n",sizeof(a)); //4 而不是40
}
程序运行结果:
我们定义一个含有10个元素的数组,那么对它的进行sizeof求得的值为40 这是必然的,然而将数组a通过函数传递过去,再进行sizeof操作得得到的结果却是4,4很明显是一个指针了,那么可以断定,调用函数的时候将参数中是数组的类型退化到了其基本类型的指针,也就是本例中 将int [10]类型退化为 int *类型,同时这种做法也避免了参数传递中的复制数组的巨大开销(如果数组长度很大的话)。
当然,这样也就起不到对参数进行保护的作用了,因为传递进去的是指针。