【问题标题】:About my code searching a element using function pointer关于我的代码使用函数指针搜索元素
【发布时间】:2021-11-01 11:21:09
【问题描述】:

我正在做一个关于使用函数指针概念在数组中查找元素的问题。但我在这方面面临一些问题。 这是我的代码。

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

代码编译正常但没有输出? 这段代码有什么问题?

【问题讨论】:

  • 刷新以查看格式良好的代码、干净的编译、清晰的问题陈述等。
  • @chux-ReinstateMonica 谢谢好友
  • 发布的代码导致段错误事件!强烈建议使用调试器来确定段错误事件发生的确切位置(以及原因)

标签: arrays c pointers function-pointers void-pointers


【解决方案1】:

无需取消引用arr,只需更改其类型即可进行指针数学运算。

// char *ptr = *(char**) arr;
const char *ptr = arr;

次要:在此处使用const 的最佳做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多