黑马程序员技术交流社区

标题: 关于求最大值的函数的问题 [打印本页]

作者: bmzhanglei    时间: 2014-4-27 18:12
标题: 关于求最大值的函数的问题
int maxOfArray(int array[])
{
    //这里报错
    int length=sizeof(array)/sizeof(int);
    // 1.定义一个变量存储最大值(默认就是首元素)
    int max = array[0];
   
    // 2.遍历所有元素,找出最大值
    for (int i = 1; i<length; i++)
{
    if (array[i] > max)
        {
            max = array[i];
        }
    }
    return max;
}

为什么不能再里面获取数组的长度啊?

作者: 兰闻天    时间: 2014-4-27 18:19
数组作为函数参数,传递到是整个数组的地址,而不是传递数组里的数组元素


int maxOfArray(int array[])
{
    //这里报错
    printf("$d\n",sizeof(array));//打印出的数值是8,这个后面会讲的,想要数组长度只能去main里
    //int length=sizeof(array)/sizeof(int);
    // 1.定义一个变量存储最大值(默认就是首元素)
    int max = array[0];
   
    // 2.遍历所有元素,找出最大值
    for (int i = 1; i<length; i++)
{
    if (array[i] > max)
        {
            max = array[i];
        }
    }
    return max;
}
作者: 魅影穿眸    时间: 2014-4-27 18:37
int length=sizeof(array)/sizeof(int)
sizeof(array) = 4
sizeof(int) = 4结果为1
而你for (int i = 1; i<length; i++)这句话执行完就没有循环,所以报错
作者: sabjiang    时间: 2014-4-27 19:07
还是内存那一块的东西没吃透应该,数组的内容存放在堆中,数组名只是存放在栈中,是对数组地址的引用,其中的值是数组首个元素在内存中的地址,不知道这么说是否准确
作者: 桑托尔    时间: 2014-4-27 19:37
本帖最后由 桑托尔 于 2014-4-27 19:39 编辑
  1. #include <stdio.h>
  2. //再加一个关于数组长度的形参,这个形参在主函数调用的时候再计算长度
  3. int maxOfArray(int array[],int length)
  4. {
  5.    
  6.     // 1.定义一个变量存储最大值(默认就是首元素)
  7.     int max = array[0];
  8.    
  9.     // 2.遍历所有元素,找出最大值
  10.     for (int i = 1; i<length; i++)
  11. {
  12.     if (array[i] > max)
  13.         {
  14.             max = array[i];
  15.         }
  16.     }
  17.     return max;
  18. }

  19. int main ()
  20. {
  21.         int a [] = {1,2,3,4,5,6,7,8,9};
  22.         
  23.         //这里面将计算好的长度值以形参的形式带入到你的自定义函数中
  24.         int m = maxOfArray( a , sizeof(a)/sizeof(int));

  25.         printf("数组中的最大值为%d\n",m) ;

  26.         return 0 ;

  27. }
复制代码


这道题其实MJ老师在视频里面讲过,
\黑马程序员_iOS开发零基础入门教程\黑马程序员_IOS开发零基础教程-03C语言\06-复杂数据类型\01-数组\练习02 。
建议温习一下
作者: bmzhanglei    时间: 2014-4-27 20:26
那个传进来的array为什么不能再函数里获取长度,而为什么非的再 main函数里去获得呢
js 函数就可以在里面获取 数组的长度啊
作者: Er01c    时间: 2014-4-27 20:55
确定一个一维数组需要两个参数:
1、数组第一个元素的地址
2、数组的长度 len
作者: bmzhanglei    时间: 2014-4-27 22:23
明白了,谢谢各位大侠的帮助




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2