- C++中允许为一个数据类型起一个“别名”,就像给别人起一个绰号一样。起别名的目的不是为了提高程序运行效率,而是为了编码方便。例如有一个结构体的名字是stu,要想定义一个结构体变量就得这样写: 
    struct stu student1;
     - struct看上去多余的,但不写就会报错。如果为struct stu起一个别名STU,书写起来就很很方便: 
STU student1;
     - 这种写法更加简练,意义也非常明确,不管是在标准头文件中还是以后的编程实践中,都会大量使用这种别名。使用关键字typedef可以为类型起一个新的别名。typedef的用法一般为: 
typedef 旧名字 新名字;
     - oldName是类型原来的名字,newName是类型新的名字。例如: 
    typedef int INT;
    INT a, b;
    a = 100;
    b = 1000;
     - typedef还可以给数组、指针、结构体等类型定义别名。先看一个给数组类型定义别名的例子: 
typedef char ARRAY20[20];
     - 表示ARRAY20是类型char [20]的别名,它是一个长度为20的数据类型,接着可以使用ARRAY20定义数组: 
    ARRAY20 a1, a2, s1, s2;  // 等价于 char a1[20]; char a2[20]; char s1[20]; char s2[20];
     - 还可以为结构体类型定义别名: 
    typedef struct stu{
        char name[20];
        int age;
        char address[20];
    }STU;
     - STU是struct stu的别名,可以使用STU定义结构体变量,例如: 
    STU student1, student2;  // 等价于 struct stu student1, student2;
     - 也可以为指针类型定义别名,例如: 
    typedef int (*PTR_TO_ARR)[4];
     - 表示PTR_TO_ARR是类型int *[4]的别名,接着可以使用PTR_TO_ARR定义数组指针: 
    PTR_TO_ARR p1, p2;  // 等价于 int (*p1)[4];  int (*p2)[4];
     - 按照类似的写法,可以为函数指针类型定义别名: 
    typedef int (*PTR_TO_FUN)(int, int); 
    PTR_TO_FUN pfunc;    // 等价于 int (*pfunc)(int, int);   // 函数指针
     - 为指针定义别名实例如下: 
    #include "iostream"
    using namespace std;
    #define  MAXSIZE 30
    // 为基本类型定义类型的别名
    typedef int INT;
    INT aa;
    // 为数组类型定义类型的别名
    typedef int ARRAY[20];
    ARRAY a1;  // 等价于int a1[20];
    // 为结构体类型定义类型别名
    typedef struct stu{
        char name[MAXSIZE];
        int age;
        char address[MAXSIZE];
    }STU;
    STU student1;  // 等价于struct stu student1;
    // 为指针类型定义类型别名
    typedef int (*PTR_TO_ARRAY)[MAXSIZE];
    PTR_TO_ARRAY b1;  // 等价于 int (*b1)[MAXSIZE];  定义一个数组指针
    typedef float (*PTR_TO_FUNC)(INT, float);
    PTR_TO_FUNC func;  // 等价于 float (*func)(int, float);  // 定义一个函数指针
    typedef char (*ptr_array)[30];  // 数组指针
    typedef INT (*ptr_func)(INT, INT);  // 函数指针
    int max(int a, int b){
        return a > b? a:b;
    }
    char str[3][30] = {
        "https://www.baidu.com",
        "百度",
        "baidu"
    };
    int main(){
    ptr_array p_array = str;  // ptr_array p_array;等价于 char (*p_array)[30];
    ptr_func p_func = max;  // ptr_func p_func;等价于 int (*p_func)(int, int); 
    cout << "max:" << (*p_func)(10, 20) << endl;
    for(int i = 0; i < 3; i++)
            cout << "str[" << i << "] = " << *(p_array+i) << endl;
        return 0;
    }
     -  需要强调的是,typedef是赋予现有类型一个新的名字,而不是创建新的类型。为了“见名知意”,请尽量使用含义明确的标识符,并且尽量大写。