54黑科技 发表于 2019-11-7 15:35:00

为什么无法输出最大最小值?求指教!

#include <stdio.h>

void max_min(int a[],int length,int *max,int *min);

int main(void)
{
        int max,min;
        int a[] = {1,2,3,4,5,6,7,8,9,10,25};
        max_min(a,sizeof(a),&max,&min);
        printf("max = %d,min = %d\n",max,min);

        return 0;
}

void max_min(int a[],int length,int *max,int *min)
{
        int i;
        *max = *min =a;
        for(i = 0;i < length;i++)
        {
                if(a < *min)
                {
                        *min = a;
                }
                if(a > *max)
                {
                        *max = a;
                }
        }
}

54黑科技 发表于 2019-11-7 15:37:47

总结:原理就是利用sizeof(),先求取数组元素所占的总的字节长度,再求出一个首元素所占的字节长度(即元素类型的长度),相除即可得到数组的长度。

jackz007 发表于 2019-11-7 15:46:03

本帖最后由 jackz007 于 2019-11-7 15:47 编辑

       这一句
       max_min(a,sizeof(a),&max,&min);
       改成这样
       max_min(a,sizeof(a)/sizeof(int),&max,&min);

54黑科技 发表于 2019-11-7 15:46:41

jackz007 发表于 2019-11-7 15:46
这一句
       max_min(a,sizeof(a),&max,&min);
       改成这样


11的话,那就对了

jackz007 发表于 2019-11-7 15:51:01

54黑科技 发表于 2019-11-7 15:46
11的话,那就对了

      sizeof(a) 肯定不对,因为它返回的是数组占用的总字节数 44,而每个int 占用了 4 个字节,所以,应该这么写:
      sizeof(a) / sizeof(int)

54黑科技 发表于 2019-11-7 15:59:06

谢谢您!
页: [1]
查看完整版本: 为什么无法输出最大最小值?求指教!