gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:02 26 4
gpt4 key购买 nike

我一直在尝试编写一个代码来检查数组中是否存在 123 的序列,为此我创建了一个check 函数来完成这项工作。但是在 ma​​in 函数之前声明此函数会导致在我编写其中的参数时出现编译问题。

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

附上错误截图。 Error produced in CodeBlocks

声明部分没有引起任何问题,当我没有在其中编写任何参数时,代码工作正常,如下所示。

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’’, [...]

关于c - 在 C 中定义导致错误之前的函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55791459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com