当数组作为函数的形參的时候,该參数退化为指针,并且是没法直接求得数组的大小。css
传数组给一个函数。数组类型本身主动转换为指针类型,于是传的实际是地址。
void func(int array[10])
void func(int array[])
void func(int *array)
因此以上三种函数声明全然等同。html
实际状况是,数组作參数,全然没法按值传递。数组
这是由C/C++函数的实现机制决定的。
函数
一般计算数组大小的方式例如如下:post
int len = sizeof(arr)/sizeof(type)spa
利用总长度和单个元素的长度关系获得数组的长度.net
但作为形參后,sizeof(arr)的长度总为4,即一个指针的长度。指针
为此,有两种方法来解决问题:htm
方法1.blog
參数传递的时候,直接加上一个參数作为数组的长度
方法2.(是错误的)
int *p = a[0]; int iLen = 0; while(p != NULL) { iLen++; *p++; }