在 C 中定义导致错误之前的函数声明

Declaration of Function before defining causing error in C

我一直在尝试编写一个代码来检查数组中是否存在 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();  

我预计在声明函数时它应该采用参数,但这里不是这种情况。指导将不胜感激。

你那里有冲突。

intint *(或者,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 *(指针)在这种情况下等同于数组的原因,引用C11,章节§6.7.6.3

A declaration of a parameter as ‘‘array of type’’ shall be adjusted to ‘‘qualified pointer to type’’, [...]