C/C++经验技巧总结

C 复杂的强制类型转换,如函数指针

2018-03-22  本文已影响2人  XDgbh
void qsort( void base, size_t nel, size_t width, int (*compar)(const void*, const void*) );

其中,compar就是函数指针的标识符。
当调用qsort()函数时,可以向它传递一个你所喜欢的比较函数,你的比较函数将接收实际的数据类型而不是void*,就像下面这样:

int intcompare( const int *i, const int *j)
{
  return (*i - *j);
}

这个函数和qsort()函数的compar()参数并没有完全匹配,所以要进行强制类型转换。
现在假设要对一个整数数组a[10]进行排序,有10个元素。根据上面列出的步骤,可以写出调用qsort()函数的实际写法是这样的:

qsort( a, 10, sizeof(int), (int (*)(const void*, const void*))intcompare );

可以看到int (*)(const void*, const void*)就是int (*compar)(const void*, const void*)删去了函数标识符(或说函数名)得到的类型。

上一篇 下一篇

猜你喜欢

热点阅读