我真的不能理解仅仅因为编写函数的不同而发生的错误


#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会使指针中的integer不带强制转换
。。\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;
}

请帮助我理解我缺少的概念或错误

在第一个版本中:

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使用之前定义的,因此没有错误的声明

#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];
}
}
}

最新更新