typedef定义的函数指针.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
typedef定义的函数指针.pdf

再谈 typedef (重点为函数指针) 有种很方便的写法。 typedef int *p ; p pointer; 这时直接把pointer 带入原式中,取代p 然后去掉typedef,得到的结果就是int * pointer; 哈哈,这样直接替换就很直观多了。 C 语言语法简单,但内涵却博大精深;如果在学习时只是止步于表面,那么往往后期 会遇到很多困难。typedef 是C 语言中一个很好用的工具,大量存在于已有代码中,特别值 得一提的是:C++标准库实现中更是对typedef 有着大量的使用。但很多初学者对其的理解 仅局限于:typedef 用来定义一个已有类型的别名(alias)。正是因为有了这样的理解,才有 了后来初学者在typedef int myint 和typedef myint int 之间的犹豫不决。很多国内大学的C 语言课之授课老师也都是如是说的,或者老师讲的不够透彻,导致学生们都是如是理解的。 我这里想结合C 语言标准文档以及一些代码实例,也说说typedef 。 int *p; 这样的代码是C 语言中最最基础的一个语句了,大家都知道这个语句声明了一个变量 p,其类型是指向整型的指针(pointer to int);如果在这个声明的前面加上一个typedef 后, 整个语义(semantics)又会是如何改变的呢? typedef int *p; 我们先来看看C99 标准中关于typedef 是如何诠释的?C99 标准中这样一小段精辟的 描述:In a declaration whose storage-class specifier is typedef, each declarator defines an identifier to be a typedef name that denotes the type specified for the identifier in the way described in xx 。 参照这段描述,并拿typedef int *p 作为例子来理解:在一个声明中,如果有存储 类说明符typedef 的修饰,标识符p 将被定义为了一个typedef name,这个typedef name 表示(denotes)一个类型,什么类型呢?就是int *p 这个声明(declarator)中标识符 (indentifier)p 的类型(int*)。 再比对一下两个声明: int *p; typedef int *p; 是不是有点茅舍顿开的感觉,int *p 中, p 是一个变量,其类型为pointer to int;在int *p 前面增加一个typedef 后,p 变为一个typedef-name,这个typedef-name 所表示的类型 就是int *p 声明式中p 的类型(int*)。说句白话,typedef 让p 去除了普通变量的身份,摇身 一变,变成了p 的类型的一个typedef-name 了。 为了巩固上面的理解,我们再来看看C 语言参考手册(C: A Reference Manual)中的说 法:任何declarator(如typedef int *p) 中的indentifier(如p)定义为typedef-name, 其(指 代p)表示的类型是declarator 为正常变量声明(指代int *p)的那个标识符(指代p)的类型 (int*)。有些绕嘴,不过有例子支撑: [例1] typedef double MYDOUBLE; 分析: 去掉typedef ,得到正常变量声明= double MYDOUBLE; 变量MYDOUBLE 的类型为double; = typedef double MYDOUBLE中MYDOUBLE 是类型double 的一个typedef-name。 MYDOUBLE d; = d 是一个double 类型的变量 [例2] typedef double *Dp; 分析: 去掉typedef ,得到正常变量声明= double *Dp; 变量Dp 的类型为double*,即pointer to double; = typedef double *Dp中Dp 是类型double*的一个typedef-na

文档评论(0)

tangtianbao1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档