`
javasogo
  • 浏览: 1822832 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C核心技术手册(三十一)

 
阅读更多

4.2.3 隐式指针转换

编译器隐式地转换确定的指针类型,分配、条件表达式使用操作符==!=,函数调用使用三种隐式的指针转换,如下节所描述,三种隐式指针转换:

l 一个指针对象类型可以隐式地转换为void指针,反之亦然;

l 一个给定类型的指针可以隐式地转换为一个该类型更合格的版本;

l 一个null指针常可以隐式地转换为任意指针类型。

4.2.3.1 指针转换为void

Void指针为具有void *类型的指针,通常称为多用途指针,可以表示任意对象的地址,而不关心它的类型,例如,malloc()函数返回一个void指针,在你使用内存块前,void指针必须转换为指向一个对象的指针。

Example 4-1示范了void指针的多个用途,程序使用标准函数qsort() 对数组进行排序,此函数定义在头文件stlib.h中,其原型如下:

 void qsort( void *array, size_t n, size_t element_size,
 int (*compare)(const void *, const void *) );

qsort()以升序排列数组元素,以array地址开始,使用快速排序算法,假定函数具有n的元素,其大小为element_size

4个参数compareqsort()调用的用做排序的函数指针,用来比较的两个元素的地址通过此函数指针的参数传入,通常,比较函数由程序定义,其返回值必须大于0,或小于0,或等于0,以表示第一个元素大于、或小于、或等于第二个元素。

Example 4-1. A comparison function for qsort( )

#include <stdlib.h>
#define ARR_LEN 20
/*
 * A function to compare any two float elements,
 * for use as a call-back function by qsort( ).
 * Arguments are passed by pointer.
 *
 * Returns: -1 if the first is less than the second;
 * 0 if the elements are equal;
 * 1 if the first is greater than the second.
 */
int floatcmp( const void* p1, const void* p2 )
{
 float x = *(float *)p1,
 y = *(float *)p2;
 return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
/*
 * The main( ) function sorts an array of float.
 */
int main( )
{
 /* Allocate space for the array dynamically: */
 float *pNumbers = malloc( ARR_LEN * sizeof(float) );
 /* ... Handle errors, initialize array elements ... */
 /* Sort the array: */
 qsort( pNumbers, ARR_LEN, sizeof(float), floatcmp );
 /* ... Work with the sorted array ... */
 return 0;
}

在上面的例子中,malloc()函数返回一个void *,接着,在qsort()中对pNumbers赋值时被隐式地转换为float*,第一个参数隐式地由float*转换为void*,函数名floatcmp隐式地解释为函数指针,最终,当floatcmp()qsort()调用时,它接收void*类型的参数,在初始化float变量前必须显式地转换为float*类型。

分享到:
评论

相关推荐

    c语言核心技术(C in a Nutsbell)

    《C语言核心技术》不仅是一本学习C语言的好书,更是一本值得长期参考的手册。无论是对于初学者还是有一定经验的开发者来说,这本书都能够提供有价值的帮助。它不仅仅涵盖了C语言的基础语法,还深入探讨了许多高级...

    C语言核心技术(英文文字版)

    《C语言核心技术》是一本由 Tony Crawford 和 Peter Rinz 合著的经典技术书籍,由著名的 O'Reilly 出版社出版。该书首次发布于2005年12月,全书共计618页,ISBN号为0-596-00697-7。 本书不仅适合初学者快速掌握...

    c语言技术手册 chm

    《C语言技术手册》是一本全面且深入探讨C语言编程的资源,旨在帮助开发者和学习者迅速查询和理解C语言的各种函数及语法特性。CHM(Compiled Help Manual)格式是微软开发的帮助文档格式,通常包含丰富的索引、搜索...

    C语言核心技术 作者Tony rawford

    ### C语言核心技术——《C in a Nutshell》 #### 一、书籍简介 《C in a Nutshell》是由Tony Rawford和Peter Rinz共同编写的关于C语言的权威指南,出版社为O'Reilly,出版日期为2005年12月,ISBN编号为0-596-00697...

    C语言核心技术(C: In a Nutshell)

    《C语言核心技术》是一本综合性的C语言参考手册,它不仅覆盖了语言本身的所有关键要素,还涉及到了运行时环境和开发工具的使用。无论是初学者还是经验丰富的开发者,都能从这本书中获得巨大的价值。通过阅读本书,...

    C语言核心技术(pdf格式)

    《C语言核心技术》一书由Tony Crawford和Peter Prinz共同编写,出版于2005年12月,由O'Reilly出版社发行,ISBN编号为0-596-00697-7,全书共618页。本书旨在为C语言程序员提供一个全面、可靠且实用的参考指南,涵盖了...

    C语言核心技术(英文PDF)

    《C语言核心技术》一书由Tony Crawford和Peter Prinz共同编写,出版于2005年12月,由O'Reilly出版社发行,ISBN编号为0-596-00697-7,全书共618页。本书是一部关于C语言及其运行时库的全面参考书籍,旨在为C语言...

    C核心技术手册 (又名:C - In a Nutshell中文版)

    ### C核心技术手册知识点总结 #### 一、C语言的基础语法 **1.1 C的特征** C语言是一种过程式编程语言,由Dennis Ritchie于1970年代初在贝尔实验室开发,最初是为了实现UNIX操作系统及其应用程序能够尽可能地与...

    云打印C-Lodop技术手册

    《云打印C-Lodop技术手册》是一本详细介绍如何利用C-Lodop进行云端打印操作的技术文档。C-Lodop,全称为Cloud Lodop,是一款高效便捷的云打印解决方案,尤其适用于小票、箱贴、财务单等各类文档的远程打印需求。其...

    LINUX内核技术手册2.pdf

    根据提供的信息,《LINUX内核技术手册2.pdf》是一本专注于Linux内核配置、构建及安装的专业技术书籍。以下是对该书所涉及的关键知识点的详细总结: ### 一、书籍基本信息 - **书名**: Linux内核技术手册 - **作者*...

    H3C核心网产品技术参考资料汇总集.rar

    02H3 C VEPC3200核心网故障处理手册pdf 03H3CBBU3100系列基带处理单元故障处理手册,p 04H3 C VEPC3200产品开局自检手册pdf 05H3 C VMEGW3200技术白皮书pdf 06移动通信技术概述pdf 07H3CEPC3108核心网特性手册(E2123)...

    C语言核心技术(英文).pdf

    综上所述,《C语言核心技术》这本书不仅是一本C语言的入门指南,还是一本详尽的参考手册。无论是初学者还是有经验的开发者,都能从中受益匪浅。通过系统地学习这些内容,读者可以更高效地使用C语言进行编程,并解决...

    MySQL核心技术手册(第二版)][1].(美)戴尔.扫描版.part2

     ·提供了mysql语句、函数、配置选项和实用工具的一个完整手册。  ·给出了几个指导章节用于帮助新手入门。  ·为php、perl和c语言提供了应用程序编程接口(api)。  ·在每章的api开头部分提供了简要的指南。  ...

    S3C2416核心板开发板硬件手册

    ### S3C2416核心板开发板硬件...综上所述,S3C2416核心板及其开发板为各类嵌入式系统设计提供了强大的硬件基础,其详细的硬件手册则为开发者提供了全面的技术指导和法律提示,是进行相关项目开发不可或缺的参考资料。

Global site tag (gtag.js) - Google Analytics