美文网首页C/C++经验技巧总结
C 复杂的强制类型转换,如函数指针

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

作者: XDgbh | 来源:发表于2018-03-22 10:17 被阅读2次
  • 复杂的强制类型转换步骤:
    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*)删去了函数标识符(或说函数名)得到的类型。

相关文章

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

    复杂的强制类型转换步骤:1、删去标识符(函数名或变量名)以及任何如extern之类的存储限定符,并把剩余的内容放在...

  • C++指针和引用

    一、指针与强制类型转换 指针类型的强制转换,是指将指针所指的内容的类型由原先的类型转换为后面的类型 p和p1的值都...

  • C++类 --- 类型转换构造函数、运算符,类成员指针

    今天呢,和大家聊一聊C++中的类型转换构造函数、类型转换运算符(函数)以及类成员指针。简单的来讲,类型转换构造函数...

  • 十一、类型转换

    1、强制类型转换 C方式的强制类型转换 C方式强制类型转换存在的问题 过于粗暴:任意类型之间都可以进行转换,编译器...

  • C++系列 --- 类型转换构造函数、运算符,类成员指针

    今天呢,和大家聊一聊C++中的类型转换构造函数、类型转换运算符(函数)以及类成员指针。 简单的来讲,类型转换构造函...

  • C语言指针强制类型转换

    转载:http://blog.csdn.net/mhjcumt/article/details/7355127 /...

  • C++类型转换的初步研究

    C风格的类型转换 C风格类型转换包括隐式和显式(强制)。如int a = 2.5或float a = (float...

  • C与C++的一点区别

    当void*指针赋值给另一个类型的指针时,C++规定必须进行强制类型转换,但在C语言中却无必要 在C++中一个内层...

  • C++类型转换

    一、C风格的强制类型转换 eg: 二、C++风格的强制类型转换 const_cast ,static_cast ,...

  • 异常

    几种常见的异常:1.常见的异常现象: 空指针异常类:NullPointerException 类型强制转换异常:C...

网友评论

    本文标题:C 复杂的强制类型转换,如函数指针

    本文链接:https://www.haomeiwen.com/subject/boanqftx.html