在 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();
我预计在声明函数时它应该采用参数,但这里不是这种情况。指导将不胜感激。
你那里有冲突。
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 *
(指针)在这种情况下等同于数组的原因,引用C11
,章节§6.7.6.3
A declaration of a parameter as ‘‘array of type’’ shall be adjusted to ‘‘qualified pointer to
type’’, [...]
我一直在尝试编写一个代码来检查数组中是否存在 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();
我预计在声明函数时它应该采用参数,但这里不是这种情况。指导将不胜感激。
你那里有冲突。
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 *
(指针)在这种情况下等同于数组的原因,引用C11
,章节§6.7.6.3
A declaration of a parameter as ‘‘array of type’’ shall be adjusted to ‘‘qualified pointer to type’’, [...]