zoukankan      html  css  js  c++  java
  • c27---typedef

    //
    //  main.c
    //  typedef
    
    #include <stdio.h>
    
    /*
     typedef可以给一个已知的数据类型起别名。
     typedef 原有的数据类型 别名;
     
     注意: 
     1. typedef不仅能给系统原有的数据类型起别名, 也可以给一个自定义的数据类型起别名
     2. 利用typedef给数据类型起别名, 并不会生成一个新的数据类型, 仅仅是给原有的类型起了一个别名而已
     */
    
    int sum(int v1, int v2)
    {
        return v1 + v2;
    }
    
    int minus(int v1, int v2)
    {
        return v1 - v2;
    }
    
    // 注意:如果是给指向函数的指针起别名,那么指向函数的指针的指针名称就是它的别名
    
    // functionPotinter == int(*functionPotinter)(int , int)
    typedef int(*functionPotinter)(int , int);
    
    int main(int argc, const char * argv[]) {
       
        // 9如何定义变量 :   数据类型 变量名称;
        int (*sumP)(int , int ) = sum;
        sumP = sum;
        int (*minusP)(int, int) = minus;
        minusP = minus;
        
    //---------------------------------------
        functionPotinter sumP = sum;
        printf("sum = %i
    ", sumP(10 , 20));
        
        functionPotinter minusP = minus;
        printf("minus = %i
    ", minusP(20, 10));
        return 0;
    }
    
    // ----------------------------给指针起别名----------------------------
    // String == char *
    typedef char * String;
    void test4()
    {
        // char *name = "lnj";,注意: 如果给指针起别名之后, 那么以后利用别名定义变量就不用再加*了
        String name = "lnj";
        printf("name = %s
    ", name);
    }
    
    // ----------------------------给枚举类型起别名----------------------------
    
    // 1.先定义枚举类型, 再给枚举类型起别名
     enum Gender  //枚举类型的作用域:从定义枚举类型那行开始,到作用域结束。
     {
         kGenderMale,
         kGenderFemale
     };
     typedef enum Gender SEX;
     //enum Gender sex0;
     //SEX sex1 = kGenderMale;
     //SEX sex2 = kGenderFemale;
     
    
    // 2.定义枚举类型的同时给枚举类型起别名
    
     typedef enum Gender
     {
         kGenderMale,
         kGenderFemale
     } SEX;
     
    
    // 3.定义枚举类型的同时给枚举类型起别名, 并且省略枚举原有类型名称
    typedef enum
    {
        kGenderMale,
        kGenderFemale
    } SEX;
    
    void test3()
    {
        
        // 给枚举起别名
        enum Gender sex0;
        SEX sex1;
        sex1 = kGenderMale;
        /*
         定义枚举变量有3种方式
         1.先定义枚举类型, 再定义枚举变量
         2.定义枚举类型的同时定义枚举变量
         3.定义枚举类型的同时定义枚举变量, 并且省略枚举类型名称
         */
        
         enum Gender2
         {
             kGenderMale2,
             kGenderFemale2
         } sex2;
         sex2 = kGenderFemale2;
         
         enum
         {
             kGenderMale3,
             kGenderFemale3
         } sex3;
         sex3 = kGenderFemale3;
        
    }
    // ----------------------------给结构体类型起别名----------------------------
    // 1.先定义结构体类型, 再给类型起别名
     struct Person   //结构体类型的作用域,从结构体类型定义的地方开始直到作用域结束。
     {
         int age;
         double height;
         char *name;
     };
     //struct Person sp1;
     //struct Person sp2;
     //struct Person sp3;
     //struct Person sp4;
     //struct Person sp5;
     
     typedef struct Person SPerson;
     //SPerson sp1;
     //SPerson sp2;
     //SPerson sp3;
     //SPerson sp4;
    
    
    // 2.定义结构体类型的同时, 给结构体类型起别名
     typedef struct Person
     {
         int age;
         double height;
         char *name;
     } SPerson;
     //SPerson sp1;
     //SPerson sp2;
     //SPerson sp3;
     //SPerson sp4;
    
    // 3.定义结构体类型的同时, 给结构体类型起别名, 并且省略掉原有类型的名称
    
     typedef struct
     {
         int age;
         double height;
         char *name;
     } SPerson;
     //SPerson sp1;
     //SPerson sp2;
     //SPerson sp3;
     //SPerson sp4;
     
     
    void test2()
    {
        
        // 给构造类型起别名
         struct Person
         {
             int age;
             double height;
             char *name;
         };
        
        struct Person sp0;
        SPerson sp;
        SPerson sp1;
        SPerson sp2;
        SPerson sp3;
        SPerson sp4;
        /*
         结构体变量的定义方式
         1.先定义类型再定义变量
         2.定义类型的同时定义变量
         3.定义类型的同时定义变量, 并且省略类型名称
         */
    }
    
    // ----------------------------给基本数据类型(int float doulbe char)起别名----------------------------
    // Integer == int
    typedef int Integer;    
    typedef Integer myInt;    // 可以给自定义的起别名
    
    void test1()
    {
        int num = 10;
        printf("num = %i
    ", num);
        
        Integer age = 30;
        printf("age = %i
    ", age);
        
        myInt score = 99;
        printf("score = %i
    ", score);
    }
    //
    //  main.c
    //  typedef和宏定义的区别
    
    #include <stdio.h>
    
    typedef int myInt;
    #define Integer int   //把Integer用int替换,#define是编译的时候替换,
    
    typedef char * String;
    #define MY_STRING char *
    
    // 一般情况下如果要给数据类型起一个名称建议用typedef, 不要用define,
    int main(int argc, const char * argv[]) {
        
        int num = 10;
        printf("num = %i
    ", num);
        
        myInt age = 30;
        printf("age = %i
    ", age);
        
        Integer score = 99;
        printf("score = %i
    ", score);
        
        char *name = "lnj";
        printf("name = %s
    ", name);
        
        String name2 = "lmj";
        printf("name2 = %s
    ", name2);
        
        MY_STRING name3 = "lk";
        printf("name3 = %s
    ", name3);
        
        String name1, name2;
        name1 = "lnj";
        name2 = "lmj";
        printf("name1 = %s, name2 = %s
    ", name1, name2);
        
    //char *name3, name4;    char *name3; char name4; 直接替换是会出问题的。
        MY_STRING name3, name4;
        name3 = "lk";
        name4 = "xb";
        printf("name3 = %s, name4 = %s
    ", name3, name4);
        return 0;
    }
  • 相关阅读:
    《人月神话》阅读笔记03
    《人月神话》阅读笔记02
    《人月神话》阅读笔记01
    《构建之法》阅读笔记03
    《构建之法》阅读笔记02
    蚂蚁通信框架实践
    红黑树
    漫画算法:什么是红黑树
    Java中的锁分类与使用
    JAVA CAS原理深度分析
  • 原文地址:https://www.cnblogs.com/yaowen/p/7404262.html
Copyright © 2011-2022 走看看