在不同的平台结构上,由于硬件的差异性,即便是相同的数据类型定义(如int )可能所占用的字节数也是不同的。这对应用程序的可移植性提出了巨大的挑战。
Typedef 正是用于解决这种差异性的一种很好的方法。它有助于创建与平台无关的类型,甚至能够隐藏复杂和难以理解的语法。也就是说,使用typedef能为代码的可移植性带来好处。提高代码的健壮性。
Typedef是怎样实现平台的无关性呢?同一种类型在一种平台上是一种模样,移植到另外一种平台上可能就会换做另外一种类型,那怎样解决呢?要一个个改变吗?
当然不!Typedef能够为现有的类型(即函数库里)创建同义字。一种程度上也定义了易于记忆的类型名,从而更好的实现作者的意图。本文主要介绍C语音中typedef的用法。编程中使用typedef的目的一般有两个:一是给变量起一个容易记忆的新名字。另一个是简化一些比较复杂的类型声明。如下所示:
一 typedef 最简单的使用
typedef int size; //此声明定义了一个int的同义字,即size。
注:typedef 并不能创建新的数据类型,它的作用仅仅为现有类型添加一个同义字。经过上面声明,你可以在所有用到int的地方用size来代替。语句定义的结尾有;.
二 typedef 与结构体结合使用
Typedef struct tagmyStruct
{
int iNum;
long iLength;
}MyStruct;
此语句实际完成两个操作:
1、定义一个新的结构类型
等同于:
Struct tagmyStruct
{
int iNum;
long iLength;
};
我们可用 struct tagmyStruct varName来定义变量,但是使用tagmyStruct varName来定义变量是不对的。因为struct 和tagmyStruct合在一起才能表示一个结构类型。
2、typedef 为这个新的结构体起一个名字 MyStruct
typedef struct tagMyStruct Mystruct ;
因此,MyStruct 实际上相当于 struct tagMyStruct,我们可使用MyStruct varname 来定义变量。
typedef struct node
{
char name[20];
struct node *link;
}stu;
这是定义的结构体变量,一个单元包含两个部分,一个用来存放name的数组,一个用来存放下一个单元地址的指向结构体node的指针。假设该单元的地址是p,那么p->name表示第一部分name[20]的地址,p->link表示第二部分,作用是存放下一个单元的地址。
2011.4.23