年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2500|回复: 0

typedef的基本使用

[复制链接]
  • TA的每日心情

    2024-10-15 10:05
  • 签到天数: 372 天

    [LV.9]以坛为家II

    发表于 2014-3-7 20:24:53 | 显示全部楼层 |阅读模式
    源代码:
    1. /*
    2. 类型别名的使用:
    3. 1、基本数据类型别名
    4.     1.1> int型类型别名:typedef int 别名名称;
    5.     1.2> int型指针类型别名:typedef int * 别名名称;
    6. 2、构造数据类型别名
    7.     2.1> 结构体类型别名:struct 类型名 {类型一; 类型二; 类型三} 别名名称;
    8.     2.2> 结构体指针类型别名:struct  类型名 {类型一; 类型二; 类型三} * 别名名称;
    9. 3、枚举数据类型别名:enum 类型名 {成员一, 成员二, 成员三} 别名名称;
    10. 4、指向函数的指针:函数返回类型 (*别名名称) (形参一, 形参二, 形参三);
    11. */
    12. #include <stdio.h>
    13. int sum(int, int);
    14. int minus(int, int);
    15. int main() {
    16.    
    17.     typedef int MyInt;  // 定义int型类型别名MyInt;
    18.    
    19.     MyInt a = 10;  // 使用新定义的别名定义一个变量并赋值;
    20.    
    21.     printf("a=%d\n", a);  // 打印该变量;
    22.     typedef int * IntPoint;  // 定义int型指针类型别名IntPoint;
    23.    
    24.     IntPoint ap = &a;  // 将变量a的地址赋予 别名定义的指针变量;
    25.    
    26.     *ap = 20;  // 用新的指针变量修改变量a的值;
    27.    
    28.     printf("a=%d\n", *ap);  // 再次打印a的值,来验证有效性
    29.    
    30.     typedef struct Person {
    31.         char *name;
    32.         int age;
    33.     } Human;
    34.     /*
    35.      1、如果在Human前加"*",则为定义一个结构体指针的别名
    36.      2、如果没有关键字"typedef":
    37.      struct Person {
    38.         char *name;
    39.         int age;
    40.      } Human;
    41.      该定义为结构体定义,并且Human为一个结构体变量
    42.      3、Person可以省略,因为有了新的别名用来定义变量,不省略则别名,原名都可以使用;
    43.      */
    44.    
    45.     Human man; // 用结构体别名新定义一个结构体变量man,在结构体别名定义的时候不能在后面直接跟man;
    46.    
    47.     man.age = 20;  // 给结构体man成员赋值;
    48.    
    49.     man.name = "yusian";  // 给结构体man成员赋值;
    50.    
    51.     printf("name=%s, age=%d\n", man.name, man.age);  // 打印成员的值,验证有效性;
    52.    
    53.     typedef enum {
    54.         spring,
    55.         summer,
    56.         autumn,
    57.         winter
    58.     } Seasons;  // 类似结构体别名定义,在变量位置跟别名名称;
    59.    
    60.     Seasons b = summer;  // 定义变量并赋值;
    61.    
    62.     printf("b=%d\n", b);  // 验证有效性;
    63.    
    64.     typedef int (*FunPoint) (int, int);  // 定义函数指针别名,类似定义函数指针:int (*p) (int, int),在前加关键字typedef,并将变量名位置替换成别名名称;
    65.    
    66.     FunPoint s = sum;  // 用函数别名定义函数指针并赋值;
    67.    
    68.     FunPoint m = minus;  // 由于这两种函数类型相同,均为int (int, int),所以可以用同一个别名来定义;
    69.    
    70.     printf("3 + 4 = %d, 5 - 2 = %d\n", sum(3, 4), minus(5, 2));  // 验证有效性;
    71.    
    72.     return 0;
    73. }
    74. // 定义一个加法函数;
    75. int sum(int n1, int n2) {
    76.     return n1 + n2;
    77. }
    78. // 定义一个减法函数;
    79. int minus(int n1, int n2) {
    80.     return n1 - n2;
    81. }
    复制代码
    运行结果:
    1. a=10
    2. a=20
    3. name=yusian, age=20
    4. b=1
    5. 3 + 4 = 7, 5 - 2 = 3
    复制代码




    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-11-22 19:36 , Processed in 0.050434 second(s), 22 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表