You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

返回指针的简单C语言函数报错:search函数类型冲突如何解决?

解决C语言中'search'函数类型冲突错误的方法

问题背景

编写了一段从用户输入的数字数组中查找指定数字并返回其内存地址的C语言代码,编译时出现以下错误:

C:\Users\hp\Desktop\Untitled1.c|26|error: 函数'search'的类型冲突|

原代码

#include<stdio.h>
#include<conio.h>
int search(int ,int ,int );
main()
{
   int i,a[i],target,*p,n;
   pritnf("enter number of numbers u want");
   scanf("%d",&n);
   printf("enter numbers you want in array");
   for(i=0;i<n;i++)
   {
       scanf("%d",&a[i]);
   }
   printf("enter the number u are searching");
   scanf("%d",&target);
   p=search(a,n,target);
   if(p==NULL)
   {
       printf("target not found");
   }
   else
   {
       printf("target found at %d",p);
   }
}
int search(int a[],int n,int target)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(a[i]==target)
        {
            return &a[i];

        }

    }
}

错误原因分析

  1. 函数声明与定义类型不匹配:
    声明时int search(int ,int ,int );指定返回类型为int,但实际函数要返回数组元素的地址(&a[i]属于int*类型),且定义的返回类型错误写为int,直接触发类型冲突报错。
  2. 数组初始化逻辑错误:
    代码中int i,a[i],target,*p,n;里,i未初始化就用来定义变长数组a,此时i的值是随机的,会导致数组大小不确定,引发未定义行为。
  3. 函数缺少未找到时的返回值:
    search函数遍历完数组未找到目标值时,没有返回NULL,会导致函数返回随机值,引发未定义行为。
  4. 格式符使用错误:
    打印指针地址应使用%p格式符,而非%d,否则会导致地址输出不正确。
  5. 拼写错误:
    pritnf是printf的拼写错误,会导致编译报错。
  6. main函数返回类型不规范:
    C标准中main函数的返回类型应为int,不能省略。

修正后的代码

#include<stdio.h>
// 修正函数声明:返回类型改为int*,参数明确类型
int* search(int a[], int n, int target);

int main()
{
   int n, target, *p;
   // 先输入n,再定义变长数组a
   printf("enter number of numbers u want: ");
   scanf("%d", &n);
   int a[n];
   
   printf("enter numbers you want in array: ");
   for(int i = 0; i < n; i++)
   {
       scanf("%d", &a[i]);
   }
   
   printf("enter the number u are searching: ");
   scanf("%d", &target);
   
   p = search(a, n, target);
   if(p == NULL)
   {
       printf("target not found\n");
   }
   else
   {
       // 使用%p格式符打印指针地址
       printf("target found at %p\n", (void*)p);
   }
   return 0;
}

// 修正函数返回类型为int*,添加未找到时的返回值NULL
int* search(int a[], int n, int target)
{
    for(int i = 0; i < n; i++)
    {
        if(a[i] == target)
        {
            return &a[i];
        }
    }
    // 未找到目标时返回NULL
    return NULL;
}

关键修改点说明

  • 将search函数的声明和定义的返回类型统一改为int*,匹配返回地址的需求。
  • 调整数组定义顺序,先获取n的值再定义变长数组a,避免未初始化变量的使用。
  • 给search函数添加未找到目标时的return NULL语句,保证函数始终有合法返回值。
  • 打印指针时使用%p格式符,并将指针强制转换为void*以符合标准。
  • 修正pritnf的拼写错误,规范main函数的返回类型和返回值。

内容的提问来源于stack exchange,提问作者REVA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:41:13