我正在从“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/