【问题标题】:I really cant understand an error occurring just due to the difference in writing the Function我真的无法理解仅仅由于编写函数的差异而发生的错误
【发布时间】:2020-07-09 08:42:10
【问题描述】:
#include<stdio.h>
void minmax(int,int,int*,int*);
int main()
{
    int a[]={186,35,132,745,2345,23,154,36,24,2,55,26,346,2456,224,257,244,2784,032,234,2134};
    int len,min,max;
    len=sizeof(a)/sizeof(a[0]);
    minmax(a,len,&min,&max);
    printf("Largest: %d and Smallest: %d ",max,min);
    return 0;
}
void minmax(int arr[],int len,int *min, int *max)
{
    *min=*max=arr[0];
    int i;
    for(i=1;i<len;i++)
    {
        if(arr[i]>*max)
        {
            *max=arr[i];
        }
        if(arr[i]<*min)
        {
            *min=arr[i];
        }
    }
}

在编写此代码时,我收到以下错误
*..\src\Test6.c:在函数'main'中:
..\src\Test6.c:8:2: 警告:传递 'minmax' 的参数 1 会在没有强制转换的情况下从指针生成整数
..\src\Test6.c:2:6:注意:预期为“int”,但参数的类型为“int
..\src\Test6.c:在顶层:
..\src\Test6.c:12:6:错误:“minmax”的类型冲突
..\src\Test6.c:2:6: 注意:'minmax' 的先前声明在这里

但是当我最初通过声明和定义函数来更改整个代码时,一切都很顺利。

#include<stdio.h>
void minmax(int arr[],int len,int *min, int *max)
{
    *min=*max=arr[0];
    int i;
    for(i=1;i<len;i++)
    {
        if(arr[i]>*max)
        {
            *max=arr[i];
        }
        if(arr[i]<*min)
        {
            *min=arr[i];
        }
    }
}
int main()
{
    int a[]={186,35,132,745,2345,23,154,36,24,2,55,26,346,2456,224,257,244,2784,032,234,2134};
    int len,min,max;
    len=sizeof(a)/sizeof(a[0]);
    minmax(a,len,&min,&max);
    printf("Largest: %d and Smallest: %d ",max,min);
    return 0;
}

请帮助我理解我遗漏的概念或错误...

【问题讨论】:

  • C 中以0 开头的整数常量是八进制格式,所以032 给出的十进制数是26。这是故意的吗?
  • 错误说明了所有原因,对吗?它是一种不言自明的权利?

标签: arrays c function pointers


【解决方案1】:

在第一个版本中:

void minmax(int,int,int*,int*);

然后

void minmax(int arr[],int len,int *min, int *max)
{

声明与定义不兼容,也与 main 中的使用不兼容:

minmax(a,len,&min,&max);

其中aint *(类似于int[]

只需将声明修改为:

 void minmax(int[],int,int*,int*);

在您的第二个版本中,minmax 之前已定义以供 main 使用,因此没有错误的声明

【讨论】:

  • 您能帮我看看对它进行哪些更改可以使它正确吗?我真的不明白为什么它不兼容。
  • 谢谢,现在我明白了我错过了什么。它现在工作正常! :))
【解决方案2】:
#include<stdio.h>
void minmax(int*,int,int*,int*);   //just change int to int*
int main()
{
    int a[]={186,35,132,745,2345,23,154,36,24,2,55,26,346,2456,224,257,244,2784,032,234,2134};
    int len,min,max;
    len=sizeof(a)/sizeof(a[0]);
    minmax(a,len,&min,&max);
    printf("Largest: %d and Smallest: %d ",max,min);
    return 0;
}
void minmax(int arr[],int len,int *min, int *max)
{
    *min=*max=arr[0];
    int i;
    for(i=1;i<len;i++)
    {
        if(arr[i]>*max)
        {
            *max=arr[i];
        }
        if(arr[i]<*min)
        {
            *min=arr[i];
        }
    }
}

【讨论】:

  • 欢迎来到 Stack Overflow!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的回答添加解释并说明适用的限制和假设。
猜你喜欢
  • 2022-01-12
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
相关资源
最近更新 更多