星若有泪 发表于 2017-4-25 22:43:43

写一个函数判断数组中的最大值 跑不了。。。

#include <stdio.h>

int max(int a[],int length)
{
        int i,b = a;
        for( i=1 ; i<length ; i++){
                if(a >= b){
                        b = a;
                }
        }
        return b;
}

int main()
{
        int a = {1,8,5,6,};
        //scanf("%d",&a);
        printf("%d",max(a,4));
    return 0;
}

“隐士” 发表于 2017-4-25 22:59:02

printf("%d",max(a,4));   带入形参的是首地址

machimilk 发表于 2017-4-26 10:54:03

int Max(int* a,int length)
{
        int i,b = *a;
        for( i=1 ; i<length ; i++){
                if(*(a+i) >= b){
                        b = *(a+i);
                }
        }
        return b;
}

int main()
{
        int a = {1,8,5,6,};
        //scanf("%d",&a);
        printf("%d",Max(a,4));
        return 0;
}

星若有泪 发表于 2017-4-26 19:58:16

machimilk 发表于 2017-4-26 10:54


定义函数时:int* a是定义数组的意思吗?为什么不能写成 int a[]?

GSMNC 发表于 2017-4-26 21:24:58

星若有泪 发表于 2017-4-26 19:58
定义函数时:int* a是定义数组的意思吗?为什么不能写成 int a[]?

也可以啊,你自己试试也就知道了

星若有泪 发表于 2017-4-26 21:41:46

试过了 会出现错误
C:\Users\dell\Desktop\c语言\第七周

星若有泪 发表于 2017-4-26 21:50:00

GSMNC 发表于 2017-4-26 21:24
也可以啊,你自己试试也就知道了

试过了运行了但答案不对出来了一个莫名其妙的数字
C:\Users\dell\Desktop\c语言\第七周\写一个函数判断数组中的最大值.c        In function 'main':

18        18        C:\Users\dell\Desktop\c语言\第七周\写一个函数判断数组中的最大值.c        passing argument 1 of 'max' makes pointer from integer without a cast

3        5        C:\Users\dell\Desktop\c语言\第七周\写一个函数判断数组中的最大值.c        expected 'int *' but argument is of type 'int'

GSMNC 发表于 2017-4-26 22:08:55

星若有泪 发表于 2017-4-26 21:50
试过了运行了但答案不对出来了一个莫名其妙的数字
C:%users\dell\Desktop\c语言\第七周\写一个函 ...

输出的是8
#include <stdio.h>

int Max(int a[],int length)
{
      int i,b = *a;

      for( i=1 ; i<length ; i++)
      {
            if(*(a+i) >= b)
            {
                b = *(a+i);
            }
      }
      return b;
}

int main()
{
      int a = {1,8,5,6,};

      printf("%d",Max(a,4));
      return 0;
}

machimilk 发表于 2017-4-27 00:24:38

星若有泪 发表于 2017-4-26 19:58
定义函数时:int* a是定义数组的意思吗?为什么不能写成 int a[]?

其实你的程序也没什么大问题
注意问题给你说一下
你写的printf("%d",Max(a,4));里面的a在c语言里面不是指向的a的地址,而是a数组第五个元素
因为你a定义了4个元素,表示为a---a
而a是不存在的,另外max最好写成Max,因为小写的max系统某些库里面有,可能会因为参数形式而报错
另外写int *是为了更好的让你理解数组在内存中的形式,就是连续的内存地址,如果让你原来的程序能跑起来,这样写也可以printf("%d",Max(a,4)); a才代表你定义的数组的地址

寒月独狼 发表于 2017-4-27 12:11:46

#include <stdio.h>

int max(int a[],int length)
{
      int i,b = a;
      for( i=1 ; i<length ; i++){
                if(a >= b){
                        b = a;
                }
      }
      return b;
}

int main()
{
      int a = {1,8,5,6,};
      //scanf("%d",&a);
      printf("%d",max(a,4));
    return 0;
}
改成这样就好了,一点毛病都没有

星若有泪 发表于 2017-4-27 12:59:05

寒月独狼 发表于 2017-4-27 12:11
改成这样就好了,一点毛病都没有

但是我如果没有确定数组元素,要自己输入数组就又出现问题了,这是为什么呢?
#include <stdio.h>

int Max(int a[],int length)
{
        int i,b = a;
        for( i=1 ; i<length ; i++){
                if(a >= b){
                        b = a;
                }
        }
        return b;
}

int main()
{
        int a;// = {1,8,5,6,};
        scanf("%d",&a);
        int length = sizeof(a)/sizeof(a);
        printf("%d",Max(a,length));
    return 0;
}

夜墨 发表于 2017-4-28 11:27:05

星若有泪 发表于 2017-4-27 12:59
但是我如果没有确定数组元素,要自己输入数组就又出现问题了,这是为什么呢?

你的scanf("%d",&a);表示的是给a数组中第五个元素赋值,不是给整个数组赋值

寒月独狼 发表于 2017-5-14 10:40:45

本帖最后由 寒月独狼 于 2017-5-14 10:42 编辑

星若有泪 发表于 2017-4-27 12:59
但是我如果没有确定数组元素,要自己输入数组就又出现问题了,这是为什么呢?

输入数组可以,用循环来实现,不能像变量一样,直接输入的
另外C语言最好定义变量什么的,放在前面去,不要在半路又来定义个变量什么的
页: [1]
查看完整版本: 写一个函数判断数组中的最大值 跑不了。。。