关于函数的一道题

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;

}


首先要说的是函数的参数是一个数组,声明数组的大小并没有任何作用,编译器并不检查形参数组的大小,因为编译器编译时把形参数组名处理为一个指针变量,用来接收一个地址,只是将实参数组首元素的地址传给形参素组名,因此形参数组名获得了实参数组的首地址,,
其次,,对于上面的函数,在传参时容易产生数组越界问题,,假定当他被调用时传递给他的正好是十个元素的的数组,,若果参数数组更大一些,他就会忽略剩余的元素

如果传递一个不足十个元素的数组,函数将访问数组边界之外的值,造成越界

优化以后就这样,传了一个长度进去


猜你喜欢

转载自blog.csdn.net/foooooods/article/details/80368207
今日推荐