c - 函数指针变量

标签 c function-pointers qsort

我正在尝试创建一个指向可以传递给 qsort() 函数的函数的函数变量,但我收到了“赋值类型不匹配” "当我尝试运行以下代码时出错。

int compareFunc (const void * a, const void * b)
{
   //codes
}

int main(void) {
  int *ptr;     //create a function pointer variable that point to compareFunc
  ptr = &compareFunc   //Initialize function pointer
  //codes
  return 0;
}

有人可以告诉我我做错了什么并解释一下 const void * 到底是什么吗?

最佳答案

您的指针声明不是函数指针。它只是一个常规指针。应该改为声明一个函数指针,如下所示。

int (*fptr) (const void *a, const void *b);
fptr = compareFunc;

对于函数指针,您永远不必使用 & 运算符显式获取地址。

还有const void *的意思是指针指向的对象/数据在那个函数中不会被修改。因此,每当您对指针指向的值执行写操作时,编译器都会引发错误。

关于c - 函数指针变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19828073/

相关文章:

c - 为什么 sizeof() 对指针数组不起作用?

c - 键入退出以退出C程序

c++ - 转换 cpp 函数以在 r 中使用

c++ - 在没有 typedef 的情况下使用指向函数指针的指针?

c - qsort死循环导致错误C

c++ - 为什么 NDK 在构建时抛出 undefined reference 错误?

mysql - 使用mysql c api更新表的有效方法

c# - 如何从 C# 中的函数指针获取函数名称?

c - qsort 用零填充数组?

c++ - qsort()函数可以与函数模板一起用作比较器吗?