关于函数的一道题
7. 下面的函数有没有错误?如果有错在哪里?
int find_max (intarray[10])
{
int i;
int max=array[0];
for(i=0;i<10;i+=1)
if(array [i]>max)
max=array [i];
return max;
}
首先要说的是函数的参数是一个数组,声明数组的大小并没有任何作用,编译器并不检查形参数组的大小,因为编译器编译时把形参数组名处理为一个指针变量,用来接收一个地址,只是将实参数组首元素的地址传给形参素组名,因此形参数组名获得了实参数组的首地址,,
其次,,对于上面的函数,在传参时容易产生数组越界问题,,假定当他被调用时传递给他的正好是十个元素的的数组,,若果参数数组更大一些,他就会忽略剩余的元素
如果传递一个不足十个元素的数组,函数将访问数组边界之外的值,造成越界
优化以后就这样,传了一个长度进去