C 函数指针

标签 c function pointers

我正在从“C by K&R”学习 C。我正在浏览“函数指针”部分。有一个使用函数指针和 void 指针对字符串数组进行排序的示例。(具体来说,在第 100 页)。我对函数指针和 void 指针有一定的了解。

那里给出的例子调用

qsort((void**) lineptr, 0, nlines-1,(int (*)(void*,void*))(numeric ? numcmp : strcmp));

而且它似乎使用了 void ptr,如下所示进行比较和交换。

我知道它需要指针数组,每个元素本身都是指向字符串的空指针。怎么可能比较、交换一个 void ptr 与另一个。

void sort(void *v[],int i,int j)
{
    id *temp;
    temp = v[i]; 
    v[i] = v[j];
    v[j] = temp;  
}

谁能解释一下这背后的概念。

最佳答案

How is it possible to compare, swap a void ptr with another?

  • 比较:将 void ptr 相互比较是没有意义的,因为它们的值是地址。

  • 交换:指针是保存地址的变量。通过更改指针的值,您可以更改它指向的地址。这里甚至不考虑数据本身。

<小时/>

注意:void 指针不会解释它们所指向的数据。这就是为什么在取消引用它们时需要显式类型转换,以便它们指向的数据和该数据分配给的变量之间存在对应关系。

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

相关文章:

c++ - 创建一个程序,根据 EST 时区打印出当前星期几

function - LISP,条件每次都返回零

function - 是否有可能找出一个函数需要多少个命名参数?

c - 需要帮助 : Stack ADT Linked list with VOID STAR implementation (C Programming)

c - 如何从 C 和 JAVA 代码中获取注册传输语言 (RTL) 代码?

c - 下标值既不是数组也不是指针也不是c中的 vector

mysql - 我们可以在游标 SQL 函数中使用声明数据类型为 TIMESTAMP 的局部变量吗?

c++ - 通过指针后结果的变化

c - 如何返回一个指针数组?

c++ - 以 size_t 0 作为边界条件进行迭代