typedef为类型声明一个新的替代名字,而不是声明一个指定类型的对象;是其他类型的同义词,而不是度里的类型。使用typedef定义一个易于记忆的、有意义的类型名,能清晰表是程序原的意图,使程序代码易于理解。
定义有意义的类型名,使程序易于理解
- typedef int COUNT;
- COUNT i, j;
这里将int类型定义为一个有意义的类型COUNT,当在程序中使用变量i、j就可以一目了然地知道他们用于计数的,提高程序的可读性,是程序易于理解。
typedef定义的类型名可以隐藏复合的类型,如
- typedef int array[100] ;
将含一百个int类型元素的数组定义为array,每次需要使用含100个int类型元素的数组时,可以用下面的方法来定义:
- array arr;
将数组类型隐藏了,并且不用每次在定义数组的时候都确定数组的大小,提高编码的效率。这种情况在需要相同类型相同大小的数组时才可以使用。
另外,typedef还可以隐藏指针类型,我们也可以为指针类型定义一个有意义的、便于记忆的类型名,如:
- typedef char * ptr;
- typedef const char * cptr;
这样定义以后我们就可以用ptr去声明一个char 的变量,用cptr声明一个const char *类型的变量。
typedef可以提高代码的可移植性。由于需要,我们可能会将程序放到另外的系统上运行,要是目标系统于当前使用的系统不一样的时候,程序可能不能正常工作。例如我们将pc己上的程序移植到嵌入式系统上,因为嵌入式系统的芯片限制,我们所使用的类型超过了表示范围。如果使用typedef,我们就可以很快的将程序修改了,如:
- typedef int int32;
可能在嵌入式系统中需要用long类型才能表示pc系统上的int类型的数据范围,于是我们只要修改int32的定义就可以了:
- typedef long int32;
这样只需要修改一行代码就可以解决问题了。
总之,typedef都只是其他类型的同义词,不是独立的类型,它可以随意地为其他类型定义同义词——只要我们需要。
可以通过结合struct、union、enum来获得独立的类型名。
- typedef struct {
- char *name;
- int age;
- char *address;
- } student_t;
- student_t s = { "young", 20, "scrj" };