现在的位置: 首页 > 综合 > 正文

数组传参

2018年04月10日 ⁄ 综合 ⁄ 共 495字 ⁄ 字号 评论关闭

今天遇到了数组传参问题:

例: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 ; //正确

抱歉!评论已关闭.