Sian 发表于 2014-3-7 20:24:53

typedef的基本使用

源代码:
/*
类型别名的使用:
1、基本数据类型别名
    1.1> int型类型别名:typedef int 别名名称;
    1.2> int型指针类型别名:typedef int * 别名名称;
2、构造数据类型别名
    2.1> 结构体类型别名:struct 类型名 {类型一; 类型二; 类型三} 别名名称;
    2.2> 结构体指针类型别名:struct类型名 {类型一; 类型二; 类型三} * 别名名称;
3、枚举数据类型别名:enum 类型名 {成员一, 成员二, 成员三} 别名名称;
4、指向函数的指针:函数返回类型 (*别名名称) (形参一, 形参二, 形参三);
*/

#include <stdio.h>

int sum(int, int);
int minus(int, int);

int main() {
   
    typedef int MyInt;// 定义int型类型别名MyInt;
   
    MyInt a = 10;// 使用新定义的别名定义一个变量并赋值;
   
    printf("a=%d\n", a);// 打印该变量;

    typedef int * IntPoint;// 定义int型指针类型别名IntPoint;
   
    IntPoint ap = &a;// 将变量a的地址赋予 别名定义的指针变量;
   
    *ap = 20;// 用新的指针变量修改变量a的值;
   
    printf("a=%d\n", *ap);// 再次打印a的值,来验证有效性
   
    typedef struct Person {
      char *name;
      int age;
    } Human;
    /*
   1、如果在Human前加"*",则为定义一个结构体指针的别名
   2、如果没有关键字"typedef":
   struct Person {
      char *name;
      int age;
   } Human;
   该定义为结构体定义,并且Human为一个结构体变量
   3、Person可以省略,因为有了新的别名用来定义变量,不省略则别名,原名都可以使用;
   */
   
    Human man; // 用结构体别名新定义一个结构体变量man,在结构体别名定义的时候不能在后面直接跟man;
   
    man.age = 20;// 给结构体man成员赋值;
   
    man.name = "yusian";// 给结构体man成员赋值;
   
    printf("name=%s, age=%d\n", man.name, man.age);// 打印成员的值,验证有效性;
   
    typedef enum {
      spring,
      summer,
      autumn,
      winter
    } Seasons;// 类似结构体别名定义,在变量位置跟别名名称;
   
    Seasons b = summer;// 定义变量并赋值;
   
    printf("b=%d\n", b);// 验证有效性;
   
    typedef int (*FunPoint) (int, int);// 定义函数指针别名,类似定义函数指针:int (*p) (int, int),在前加关键字typedef,并将变量名位置替换成别名名称;
   
    FunPoint s = sum;// 用函数别名定义函数指针并赋值;
   
    FunPoint m = minus;// 由于这两种函数类型相同,均为int (int, int),所以可以用同一个别名来定义;
   
    printf("3 + 4 = %d, 5 - 2 = %d\n", sum(3, 4), minus(5, 2));// 验证有效性;
   
    return 0;

}

// 定义一个加法函数;
int sum(int n1, int n2) {

    return n1 + n2;

}

// 定义一个减法函数;
int minus(int n1, int n2) {

    return n1 - n2;

}
运行结果:a=10
a=20
name=yusian, age=20
b=1
3 + 4 = 7, 5 - 2 = 3




页: [1]
查看完整版本: typedef的基本使用