TYPEDEF,typedef用法详解

  TYPEDEF,typedef用法详解

  本文介绍了关键字typedef在C语言中的用法。

  1.概述typedef是C语言的关键词,它的作用是将数据类型定义为一个新的名称。这里的数据类型包括内部数据类型(int,char等。)和用户定义的数据类型(struct等。).

  2.用法使用typedef定义新类型的方法(步骤):在传统的变量声明表达式中,用new(类型名)替换变量名,然后在语句的开头加上关键字typedef。

  下面用两个例子来描述typedef的使用步骤。

  示例1:

  【第一步】:int a;3354传统变量声明表达式

  【第二步】:int Myint _ t;3354用新的类型名myint _ t替换变量A。

  【第三步】:typedef int muint _ t;3354在语句开头添加typedef关键字,myint_t是我们定义的新类型。

  示例2:

  【第一步】:void(parr)(int a);3354传统函数指针变量声明表达式

  【第二步】:void(parr)(int a);3354用新的类型名parr替换PARR

  【第三步】:type df void(* parr)(int a);3354在语句开头添加typedef关键字,PARR是我们定义的新类型。

  特别:以上两个例子只是为了演示typedef的使用步骤,新手容易理解。实际写代码的时候,只会把“步骤3”对应的语句写入代码!

  3.角色1)1)typedef的一个重要用途是定义与机器无关的类型。例如,定义一个名为“FLOW”的浮点类型,它可以在目标机器上获得最高的精度:

  typedef长双流;如果在不支持long double的机器上运行相关代码,只需修改相应的typedef语句,例如:

  typedef双流;或者:

  typedef浮点流;2)使用typedef为已有类型创建别名,为变量定义一个新的易记且含义明确的名称。例如:

  typedef无符号整数单元;3)通过使用typedef简化一些复杂的类型声明,例如:

  TypeVoid (* PARR) (char* ps,unsigned int pa)上面的语句引入了PARR type作为函数指针的同义词。parr type定义的指针将指向一个函数,该函数包含两个类型分别为char *和unsigned int的参数,以及一个类型为void的返回值。通常,当函数的参数是回调函数时,可以使用typedef来简化声明。

  例如,上述示例的后续示例如下:

  假设(const string ret,parr PARR,bool bOnlyOne)注意:第二个参数的类型名和变量名应该区分大小写。

  上面代码的第一个参数是复制的变量本身,传递实参,或者不取形参就传递形参。

  第二个参数是回调函数,所以对应的回调函数(parr)的地址以parr PARR(类型变量)的形式给出,第三个参数是布尔变量,类似于float、double等。

  在这个例子中,如果不能用typedef来简化声明,那么假设的函数声明就会很复杂。因此,在一些负责任的函数声明中,有必要使用typedef来简化声明。

  4.4.typedef和#define之间的区别如下:

  1)#define用于简单的字符串替换。

  2)typedef就是给一个类型起一个新名字。Typedef用于定义变量类型,其作用域仅限于已定义的函数或文件。宏定义没有这个功能。

  一般来说,使用typedef比使用#define更好,尤其是有指针的时候。

  示例1:

  代码如下:

  typedef char * parr1# define parr 2 char *;parr1 s1,S2;parr2 s3,S4;上述变量定义中,s1、s2、s3都定义为char类型;然而,s4被定义为char类型,而不是我们期望的指针变量char。这是因为#define只做简单的字符串替换,替换后的相关代码相当于:

  char* s3,S4;当使用typedef为char*定义新类型的parr1时,相关代码等效于:

  char *s3,* s4示例2:

  代码如下:

  typedef char * pStrchar string[5]= test ;const char*p1=字符串;const pStr p2=stringP1;p2;在编译期间,错误报告如下:

  根据上面的错误信息,可以看出p2是一个只读常数,所以p2是错误的。这个问题再次提醒我们:typedef不同于#define,typedef不是简单的文本替换。在上面的代码中,const pStr p2不等于const char p2,pStr是作为类型存在的,所以const pStr p2实际上是一个p2变量,限制了pStr的类型,p2常量是只读的。也就是说,const pStr p2和pStr const p2本质上没有区别(可比const int p2和int const p2)。都是对变量p2的只读限制,只不过这里变量p2的数据类型是我们自己定义的pStr,而不是系统固有的类型(比如int)。

  所以const pStr p2意味着数据类型为char的变量p2是只读的,所以p2是错误的。

  注意:在这个例子中,typedef定义的新类型与编译系统中固有的类型没有什么不同。

  转载请联系作者取得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: