当前位置:  编程技术>c/c++/嵌入式

用typedef定义类型详细总结

    来源: 互联网  发布时间:2014-10-21

    本文导语:  除了可以直接使用C提供的标准类型名(如:int ,char ,float,double,long等)和自己声明的结构体、共用体、枚举类型外,还可以使用typedef声明 新的类型名 来代替 已有的 类型名。如: typedef int INTEGER; typedef float REAL; 指定用INTEGER代...

除了可以直接使用C提供的标准类型名(如:int ,char ,float,double,long等)和自己声明的结构体、共用体、枚举类型外,还可以使用typedef声明 新的类型名 来代替 已有的 类型名。如:

typedef int INTEGER;

typedef float REAL;

指定用INTEGER代表int类型,REAL代表float类型,这样,下面的两行等价:

1)int i,j;  float a,b;

2)INTEGER i,j;   REAL a,b;

可以声明结构体类型:
typedef struct

{
      int month;

      int day;

      int year;

}DATE;

声明了新类型DATE,这时就可以使用DATE定义变量: DATE birthday(不要写成 struct DATE birthday;);DATE* p;//指向结构体类型的指针。

还可以进一步:

1)typedef int NUM[10];//声明整型数组类型

    NUM n;//定义n为整型数组变量,其中n[0]--n[9]可用

2)typedef char* STRING;//声明STRING为字符指针类型

    STRING p,s[10];//p为字符指针变量,s为指针数组

3)typedef int (*POINTER)();//声明POINTER为指向函数的指针类型,该函数返回整型值,没有参数

    POINTER P1,P2;//p1,p2为POINTER类型的指针变量

说明:

      1)用typedef可以声明各种类型名,但不能用来定义变量,用typedef可以声明数组类型、字符串类型、使用比较方便。

例如:定义数组,原来是用:int a[10],b[10],c[10],d[10];由于都是一维数组,大小也相同,可以先将此数组类型声明为一个名字:

typedef int ARR[10];

然后用ARR去定义数组变量:

ARR a,b,c,d;//ARR为数组类型,它包含10个元素。因此a,b,c,d都被定义为一维数组,含10个元素。可以看到,用typedef可以将 数组类型 和 数组变量 分离开来,利用数组类型可以定义多个数组变量。同样可以定义字符串类型、指针类型等。

      2)用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。

      3)typedef与#define有相似之处,但事实上二者是不同的,#define是在 预编译 时处理,它只能做简单的字符串替换,而typedef是在 编译时 处理的。它并不是做简单的字符串替换,而是采用如同 定义变量 的方法那样来 声明 一个类型。

例如:typedef int COUNT;和#define COUNT int的作用都是用COUNT代表int,单事实上它们二者是不同的。

      4)当不同源文件中用到 同一类型数据时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用#include命令把它们包含进来。

      5)typedef有利于程序的通用与移植。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘typedef'
  • 关于typedef的问题
  • typedef的一点疑惑
  • typedef void SigHandler (); ??? 帮忙
  • 关于:typedef unsigned char
  • 请教一个关于typedef程序的问题
  • typedef_struct与struct之间的区别
  • 求助:linux下typedef struct {unsigned long long pmd;}pmd_t;中有两个long,是什么意思?
  • C语言中#define与typedef的互换细节详解
  • typedef signed long long Int64; 这样的声明为什么在windows VC下不能通过?
  • C语言typedef与复杂函数声明问题的深入解析
  • 如何解决expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘typedef’
  • 用C写的OO模块,碰到编译器抱怨符号多重typedef,怎么解决呢?
  • 1. 请问linux下可以使用“typedef list<对象*> 对象列表名 ”和iterator吗?
  • C++中typedef 及其与struct的结合使用
  • 基于typedef的用法详解
  • 深入解析C语言中typedef的四个用途
  • typedef和#define的用法以及区别
  • 深入C++ typedef的用法总结(必看)
  • C语言基础知识点解析(extern,static,typedef,const)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3