鱼C论坛

 找回密码
 立即注册
查看: 2368|回复: 12

[已解决]写一个函数判断数组中的最大值 跑不了。。。

[复制链接]
发表于 2017-4-25 22:43:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

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

int main()
{
        int a[4] = {1,8,5,6,};
        //scanf("%d",&a[4]);
        printf("%d",max(a[4],4));
    return 0;
}
最佳答案
2017-4-27 00:24:38
星若有泪 发表于 2017-4-26 19:58
定义函数时:int* a  是定义数组的意思吗?为什么不能写成 int a[]?

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

使用道具 举报

发表于 2017-4-25 22:59:02 | 显示全部楼层
printf("%d",max(a,4));     带入形参的是首地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[4] = {1,8,5,6,};
        //scanf("%d",&a[4]);
        printf("%d",Max(a,4));
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-26 19:58:16 | 显示全部楼层

定义函数时:int* a  是定义数组的意思吗?为什么不能写成 int a[]?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

也可以啊,你自己试试也就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-26 21:41:46 | 显示全部楼层
试过了 会出现错误
C:\Users\dell\Desktop\c语言\第七周
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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        [Warning] passing argument 1 of 'max' makes pointer from integer without a cast

3        5        C:\Users\dell\Desktop\c语言\第七周\写一个函数判断数组中的最大值.c        [Note] expected 'int *' but argument is of type 'int'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[4] = {1,8,5,6,};

        printf("%d",Max(a,4));
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-27 00:24:38 | 显示全部楼层    本楼为最佳答案   
星若有泪 发表于 2017-4-26 19:58
定义函数时:int* a  是定义数组的意思吗?为什么不能写成 int a[]?

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

使用道具 举报

发表于 2017-4-27 12:11:46 | 显示全部楼层
#include <stdio.h>

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

int main()
{
        int a[4] = {1,8,5,6,};
        //scanf("%d",&a[4]);
        printf("%d",max(a,4));
    return 0;
}
改成这样就好了,一点毛病都没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 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[0];
        for( i=1 ; i<length ; i++){
                if(a[i] >= b){
                        b = a[i];
                }
        }
        return b;
}

int main()
{
        int a[4];// = {1,8,5,6,};
        scanf("%d",&a[4]);
        int length = sizeof(a)/sizeof(a[0]);
        printf("%d",Max(a,length));
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你的scanf("%d",&a[4]);表示的是给a数组中第五个元素赋值,不是给整个数组赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-14 10:40:45 | 显示全部楼层
本帖最后由 寒月独狼 于 2017-5-14 10:42 编辑
星若有泪 发表于 2017-4-27 12:59
但是我如果没有确定数组元素,要自己输入数组就又出现问题了,这是为什么呢?


输入数组可以,用循环来实现,不能像变量一样,直接输入的
另外C语言最好定义变量什么的,放在前面去,不要在半路又来定义个变量什么的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 06:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表