C 复杂的强制类型转换,如函数指针
2018-03-22 本文已影响2人
XDgbh
- 复杂的强制类型转换步骤:
1、删去标识符(函数名或变量名)以及任何如extern之类的存储限定符,并把剩余的内容放在一对括号里。
2、把上一步产生的内容放在需要进行类型转换的对象的左边。 - 举例,强制类型转换函数指针的类型
大家经常需要强制类型转换以便使用qsort()库函数。这个库函数接收4个参数,其中一个是指向比较函数的指针。
qsort()的函数原型声明如下:
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*)
删去了函数标识符(或说函数名)得到的类型。