九、用户自己建立数据类型——用typedef声明新类型名

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

1、简单地用一个新的类型名代替原有的类型名

typedef int Count;
Count i,j;
使用Count定义变量i和j,可以使人更加一目了然地知道它们是用于计数的。

2、命名一个简单的类型名来代替复杂的类型表示方法

有些类型形式复杂,难以理解,容易写错。

2.1、C 允许程序设计者用一个简单的名字代替复杂的类型形式,例如:

  1. 命名一个新的类型名来代表结构体类型
  2. 命名一个新的类型名来代表数组类型
    typedef int Num[100];
    Num a;//定义a为整型数组名,它有100个元素
  3. 命名一个新的类型名代表指针类型
    typedef char *String;
    String p,s[10];//p为字符指针变量,s为字符指针数组
  4. 命名一个新的类型名代表指向函数的指针类型
    typedef int (*Pointer) ( );//声明Pointer为指向函数的指针类型,该函数返回值为整型
    Pointer p;//p为Pointer类型的指针变量

2.2、声明一个新类型的方法是

  1. 先按定义变量的方法写出定义体;
  2. 将变量名换成新类型名;
  3. 在最前面加typedef;
  4. 然后可以用新类型名去定义变量;

注意:

习惯上常把用typedef 声明的类型名的第一个字母用大写表示。

  1. 以上方法实际上是为特定的类型指定了一个同义词
    typedef int Num[100];
    Num a;//Num是int[100]的同义词,代表有100个元素的整型数组)
  2. 用typedef 只是对已存在的类型指定一个新的类型名,而没有创造新的类型;
  3. 用typedef声明数组类型、指针类型、结构体类型、共用体类型、枚举类型等,使得编程序更加方便。
  4. typedef 与#define表面上有相似之处,
    typedef int Count;
    #define Count int;
    从表面看它们的作用都是用Count 代替int.但事实上,它们二者是不同的。#define 是在预编译时处理的,它只能作简单的字符串替换,而typedef是编译阶段处理的。实际上它并不是作简单的字符串替换。
  5. 当不同的源文件中用到同一类型数据(尤其是像数组、指针、结构体、共用体等类型数据时),常用typedef声明一些数据类型。可以把所有的typedef名称声明单独放在一个头文件中,然后在需要用到它们的文件中用#include 指令把它们包含到文件中。这样编程者就不需要在各文件中自己定义typedef名称了。
  6. 使用typedef名称有利于程序的通用和移植。有时程序会依赖于硬件特性,用typedef类型就便于移植。

猜你喜欢

转载自blog.csdn.net/lijiahao1212/article/details/129981980