今天遇到了数组传参问题:
例:int a[]={2,3,5,0,1,8,7,9};
int lenth =sizeof(a);//lenth =32
int func(int b[])
{
int lenth =sizeof(b);
return lenth;
}
int main(void)
{
int lenth =func(a);//lenth =4
}
参数传递过程中数组长度发生变化?
解惑:
数组在作为函数参数时,数组名将蜕化为指针。已经蜕化得不知道自己有几个元素了。
数组名退化为指针,在这里强调一下:数组的元素类型仍然存在!这里要注意的是多维数组的情况。
以2维数组为例:
void fun2(char arrayMulti[3][5]);
那么在函数fun2中,arrayMulti蜕化成的是char (*)[5],(只退化一层)即:指向char[5]类型的指针,因为前面分析过
arrayMulti的元素的类型是char[5],所以在程序中:
char **pm = arrayMulti ; //错误:从char (*)[5]到 char **的赋值
char (*pm5)[5] ;
pm5 = arrayMulti ; //正确