我一直在尝试编写一个代码,该代码可以检查数组中是否存在123的序列,而我为此做了一个 check 函数。但是在 main 函数之前声明此函数会在我在其中写入参数时引起编译问题。
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int check(int, int); /* This line is cauing trouble */
void main()
{ int arr_size;
int a[]={0,1,2,1,2,1,4,5,1,2,3,4,5};
arr_size = sizeof(a)/sizeof(a[0]);
printf("%d",check(a, arr_size));
}
int check(int a[], int arr_size)
{
int i;
for(i=0;i<arr_size-1; i++)
{
if(a[i]==1 && a[i+1]==2 && a[i+2]==3)
{
return 1;
}
}
return 0;
}
声明部分没有引起任何问题,当我没有在其中编写任何参数时,代码运行正常。
int check();
我希望在声明函数时应该使用参数,而在这里情况并非如此。指导将不胜感激。
答案 0 :(得分:5)
您在那里有冲突。
int
和int *
(或int []
)不是同一类型。
将您的前向声明更新为
int check(int *, int);
也就是说,考虑到arr_size
的用法,您需要将循环条件从更改为
for(i=0;i<arr_size-1; i++)
到
for(i=0;i<arr_size-2; i++)
因为您将[i+2]
用作循环内的索引之一。
在这种情况下,关于int *
(指针)与数组等效的原因,请参考第{6.7.6.3章,C11
将参数声明为“类型数组” 调整为“ 输入’,[...]