赞
踩
请看下文
C语言中typedef关键字应用比较常见,许多C语言初学者对它的用法不甚了解。事实上,我们可以用typedef来定义自己习惯使用的数据类型名称,可以替代自己所熟悉的基本类型、数组类型、指针类型以及自己定义的结构体类型、共用体类型、枚举类型等。一旦我们在程序中定义了自己的数据类型名称,我们就可以像使用int、float和double等基本数据类型一样来使用它。实际使用中,typedef有以下几种主要形式。
1、给基本数据类型定义新名字
基本数据类型的新名字定义通常有两个方面的作用:
1)使数据类型名称简洁
新类型名字定义代码如下所示:
typedef unsigned int UINT;
新类型名UINT定义之后就可以使用它来定义变量,定义代码如下:
UINT a,b,c;
2)代码中的类型与平台无关
由于C语言代码有较强的移植性,通过代码移植,可以使其运行在不同的硬件平台上,使用typedef就可以定义与平台无关的类型。假如用户的程序代码用到了浮点类型,不同平台支持的最高精度不同,这样用户在编程时可以用typedef直接定义一个名为REAL的浮点类型,代码在不同平台运行时仅需修改REAL的定义即可。
如某个平台最高支持long double,那么可以将REAL定义如下:
typedef long double REAL;
如果另一个平台最高仅支持float,那么可以将上述定义修改成如下形式:
typedef float REAL;
2、给数组类型定义新名字
与给基本数据类型定义新名字类似,给数组类型可以定义新名字,定义形式如下:
typedef int ARR_T[50];
这里ARR_T就是一个整型数组类型名,当用户需要定义包含50个元素的整型数组时,可以这样定义:
ARR_T myIntArr;
这里myIntArr就是一个包含了50个元素的数组名。
3、给指针类型定义新名字
对于普通的指针类型,定义类似于上述两种情况,定义代码如下:
typedef int * PINT;
PINT pin1, pin2;
这里PINT是一个指向整型变量的指针类型,利用它定义了两个指向整型变量的指针pin1和pin2。
对于复杂一点的指针类型,就更能体现出typedef的优势。请看下面的声明代码示例:
int * (*s[10])(int *, char *(*)());
对于这个复杂的声明,可以通过typedef定义一个新的简单的别名。过程如下:在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名(这里为s)的部分留到最后替换,最终得到的就是上述声明的最简化版,具体定义如下:
typedef char *(*pParam)();
typedef int *(*PFUN)(int *, pParam);
PFUN s[10];
4、给自定义数据类型定义新名字
假如用户程序用到了许多自定义数据类型,如结构体类型、共用体类型、枚举类型等。为了使自定义数据类型简洁,可以在其定义的同时时使用typedef给其重新定义一个较为简洁、直观的名字。以结构体为例,定义代码形式如下:
typedef struct tagNODE
{
int data;
struct tagNODE *next;
}NODE, *PNODE;
这里在定义结构体数据类型时,利用typedef定义了两个类型,NODE和PNODE分别为普通变量类型和指向结构的指针类型。
注意,结构体内部一定要用原结构体类型名(struct tagNODE)定义指针next,千万不可以用PNODE或NODE*定义,这是因为此时结构体类型还没有定义完成,不可以使用PNODE和NODE。
定义完之后,就可以使用新类型名定义变量了,简化了定义,使用形式如下:
NODE nd1, nd2, nd3;
PNODE pnd;
nd1, nd2, nd3为普通结构体变量,pnd为指向结构体变量的指针。
关于typedef典型用法今天就总结到这,如果大家有任何疑问请留言探讨。我是“C语言知识传播者”,我会用心总结C语言知识的点点滴滴,你的关注是我持续创作的动力,请关注我,收藏本文、转发并点赞,希望得到你们的持续关注,谢谢!
举报/反馈
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。