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

C语言用函数指针查找数组元素的代码编译通过但无输出,是什么问题?

代码错误原因及修复方案
  • 核心错误位于search函数的指针转换逻辑:
    主函数传入search的arr参数是数组首地址,本质是指向首元素的int*类型(被隐式转为void*入参)。原代码中char* ptr = *(char**)arr;的写法错误地将void*强转为二级指针再解引用,相当于把数组第一个元素的数值(本案例中为整数2)当作内存地址赋值给ptr,后续遍历过程中访问ptr + i * ele_size属于非法内存访问,触发操作系统段错误,程序直接终止,因此无任何输出。
  • 修复方案:
    仅需修改search函数中ptr的赋值逻辑,直接将入参arr强转为char*即可,无需解引用:
    char* ptr = (char*)arr; 
    

修复后完整代码

#include <stdio.h>
#include <stdbool.h>

bool compare( const void* a, const void* b)
{
    return (*(int*)a == *(int*)b);                    
}

int search(const void * arr, int arr_size, int ele_size, void* x, bool compare(const void*, const void*))
{
    char* ptr = (char*)arr; 
    int i;

    for (i = 0; i < arr_size; i++)
    {
        if (compare(ptr + i * ele_size, x))
        {
            return i;
        }
    }
    return -1;
}

int main()
{
    int arr[] = { 2, 5, 7, 90, 70 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 7;
    printf("Returned index is %d ", search(arr, n, sizeof(int), &x, compare));
    return 0;
}

修改后程序正常输出Returned index is 2 ,符合预期结果。该实现保留了泛型查找的能力,只要传入对应类型的compare函数即可支持不同类型数组的查找。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:18:00