zoukankan      html  css  js  c++  java
  • 0041 枚举 typedef 预处理指令:宏

    /*
     
     
        枚举类型:
     
           C语言提供了一个种类型,这种类型的变量的取值被限定在一定的范围之内了
         
        枚举类型的定义:
     
           enum 枚举类型名{  枚举值1,枚举值2,.... };
     
        举例:
     
           定义一个变量,保存一周的第几天
     
           enum weekday{ zhouyi,zhouer,zhousan,zhousi,zhouwu ,zhouliu,zhouri };
     
           定义iPhone手机的颜色
     
           关于枚举类型元素的命名习惯
     
           enum iColor{kIcolorWhite,kIcolorBlack,kIcolorTHJ};
     
           定义人得性别
           enum Sex{kSexMan,kSexWomen,kSexYao};
     
     
           //weekday  iColor  Sex 这些都是枚举类型
     
     */
    
    
    #include <stdio.h>
    //全局的枚举类型
        enum Sex{kSexMan,kSexWomen,kSexYao};
    int main(int argc, const char * argv[]) {
        
        //定义局部的枚举类型
        enum weekday{ zhouyi,zhouer,zhousan,zhousi,zhouwu ,zhouliu,zhouri };
        
        enum iColor{kIcolorWhite,kIcolorBlack,kIcolorTHJ};
        
    
        
        return 0;
    }
    
    /*
     
       枚举类型的变量
     
           枚举类型的变量
     
       枚举类型的变量的定义
     
           enum iColor{kIcolorWhite,kIcolorBlack,kIcolorTHJ};
     
           1)先定义枚举类型,再定义枚举变量
    
               enum 枚举类型名  枚举变量名列表;
     
               enum iColor  iPhoneColor;  //iPhoneColor的取值是有要求的
                                          //取值应为kIcolorWhite,kIcolorBlack,kIcolorTHJ中的其中一个
     
     
     
     
           2)定义枚举类型的同时,定义变量
     
              enum Sex{kSexMan,kSexWomen,kSexYao} isex;
     
     
     */
    
    
    #include <stdio.h>
    
    //默认值              0           1            2
    //手动赋值            5            6            7
    enum iColor{kIcolorWhite=5,kIcolorBlack,kIcolorTHJ};
    
    int main(int argc, const char * argv[]) {
        
        //1、枚举类型变量的定义
        enum iColor  iPhoneColor;  //iPhoneColor的取值是有要求的
        //取值应为kIcolorWhite,kIcolorBlack,kIcolorTHJ中的其中一个
        
        enum Sex{kSexMan,kSexWomen,kSexYao} isex;
        
        //2、枚举类型变量的初始化
        
        //给枚举变量赋值
        iPhoneColor = kIcolorTHJ;
        isex = kSexYao;
        
        //3、枚举变量如何使用
        printf("%d
    ",iPhoneColor);
        
        //4、枚举变量的值
        //枚举类型定义完成以后,系统会自动给枚举的每个元素都会赋值一个整形的初值
        // 默认初值:从第一个元素开始值为0,以后个元素的值,是上一个元素的值+1,
        //
        
        //5、应用
        struct Person{
        
            char *name;
            //char sex; //'z'
            enum Sex isex; //kSexMan,kSexWomen,kSexYao
        
        };
        
        //6、不按套路的出牌
        iPhoneColor = 3.4;  //尽量不要这么干
        printf("%d
    ",iPhoneColor);
    
        
        
        return 0;
    }
    
    //
    //  main.c
    //  12-typedef关键字介绍
    //
    //  Created by apple on 15/1/11.
    //  Copyright (c) 2015年 itcast. All rights reserved.
    //
    
    #include <stdio.h>
    
    int main(int argc, const char * argv[]) {
        
        //typedef就给给别人起外号
        int a = 10;
        printf("%d
    ",a+10);
        
        //给int起个别名
        typedef int MALATANG;  //typedef语句要以分号结束
        //用别名定义了一个新的变量 qiezi
        MALATANG qiezi = 3;
        MALATANG *p = &qiezi;
        
        printf("%d
    ",qiezi+100);
        printf("%d
    ",*p);
        
        return 0;
    }
    
    //
    //  main.c
    //  13-typedef使用方法
    //
    //  Created by apple on 15/1/11.
    //  Copyright (c) 2015年 itcast. All rights reserved.
    //
    
    #include <stdio.h>
    int sum(int a,int b){
    
        return a+b;
    
    }
    
    int jian(int a,int b){
        
        return a-b;
        
    }
    
    int main(int argc, const char * argv[]) {
        //1、基本数据类型
        
        typedef int  MALATANG;
        
        //2、用在数组,给数组起别名
        typedef int  ARRAY[5];   //int a[5];  数组长度为5
        ARRAY a1={1,2,3,4,5},b1={5,4,3,2,1};  //int a1[5],b1[5];
        
        for (int i=0; i<5; i++) {
            printf("%d	",b1[i]);
        }
        
        //3、给结构体其别名
        struct Person {
        
            char *name;
            int age;
        
        };
        
        printf("
    ");
        struct Person p1={"zbz",18};
        //给 struct Person 起个别名 P
        typedef struct Person P;
        
        //用别名定义新的变量
        P p2 = {"xzmly",28};
        printf("name:%s,age:%d
    ",p2.name,p2.age);
        
        //给结构体定义别名2
        typedef struct Car {
        
            int lunzi;
            int speed;
        
        }MYCAR;   //表示把结构体起个别名 MYCAR
        
        MYCAR car1={1,200};
        
        //给匿名的结构体起个别名
        typedef struct {
        
            int screenSize;
            int ram;
    
        }IPHONE;
        
        //用新类型定义结构体变量
        IPHONE iphone7Plus={10,8};
        
    
        //4、给枚举类型起别名
        
        //
        typedef enum Sex{kSexMan,kSexWomen,kSexYao} ISEX;  //ISEX别名
        //WEEKDAY也是别名
        typedef enum {zhouyi,zhouer,zhousan,zhousi} WEEKDAY;
        
        //给枚举类型起个别名 S
        typedef enum Sex S;
        
        S s1,s2;
        s1 = kSexYao;
        printf("%d
    ",s1);
        
        //5、给函数指针
        
        //指向函数的指针
        int (*p)(int,int);   //函数指针
        //给函数中指针其别名
        typedef int (*FUN)(int,int);  //FUN是一个别名
        FUN f1,f2;  //f1和f2都是函数指针
        f1 = jian;
        printf("%d
    ",f1(61,23));
      
        return 0;
    }
    
    /*
     
         宏:
     
             C语言中我们自定义的特殊标示符,习惯大写
     
         宏的定义:
     
             #define 宏名 宏字符串(可以是常量、变量、表达式)
     
         注意:预处理指令,经常写在函数之前
              宏不是一个语句,是一个预处理指令,所以不需要加分号结束
     
         3、宏替换
     
            源程序在编译之前,由预处理程序对我们写的源代码进行处理:会把源代码中所有出现 宏名 的地方一律使用 宏的字符串 去替换
     
     */
    
    
    #include <stdio.h>
    #define M 10
    #define M1 y*y+3*y
    
    #define R 4
    #define PI 3.14
    #define AREA PI*R*R   //嵌套定义
    #define INT1 int
    #define P struct Person
    
    void test(){
    
        printf("M = %d
    ",M);
    
    }
    
    //#undef M     //此处的作用是,取消宏定义
    void test1(){
        
        printf("test1 = %d
    ",M);
        
    }
    
    int main(int argc, const char * argv[]) {
        
        int a[M+2];  //int a[12]
        printf("%d
    ",M);  //把M的值打印出来
        
        int y = 3,result=0;
        
        result = 3*M1+2*M1-50;
        //错误的
        //       3*(y*y+3*y)+2*(y*y+3*y)-50;
        //        54        +36         -50;
        //        40
        
        //正确的
        //       3*y*y+3*y+2*y*y+3*y-50;
        //        27  +9  + 18  + 9 -50;
        //        13
    
        printf("result = %d
    ",result);
        
        //宏使用的注意事项
        //1、宏是有作用域的  #undef 宏名 可以取消宏定义
        test();
        test1();
        
        //2、在字符串中出现的宏名不会被替换
        
        //3、宏可以嵌套定义
        printf("%.2f
    ",AREA);
        
        //4、使用宏其别名
        INT1 a1;
        a1 = 10;
        printf("a1 = %d
    ",a1);
        
        P{
            int age;
        };
        
        P p1 = {23};
        
        return 0;
    }
    
    /*
     
        宏的分类:
     
         无参宏    #define M 10
     
         有参宏    #define SUM(a) a+a
     
         SUM(3)  //不仅要 a+a替换,而且还要把 实参3代入到 字符串中
     
     
     
     */
    
    #include <stdio.h>
    #define SUM(a) a+a
    #define M1(x  ,y) (x)*(y)+(x)+(y)
    #define M2(a) a+3*y
    #define M3(m,n) m = a+2;n=a*2;
    
    int main(int argc, const char * argv[]) {
        
        int result = SUM(3);  //6
        //有参宏使用
        result = M1(4, 5);    //29
        
        int y = 2;
        //有参宏使用
        result = M2(3);  //9
        
        //有参宏的使用注意事项
        //1、宏的形参之间可以出现空格,但是宏名和形参之间不能出现空格
        int a = 3;
        //2、有参宏宏的参数最好用括号括起来
        result = M1(a+3, a-1);
        //(x  ,y) x*y+x+y
        //       6*2 +6+2
        // 20
        
        //  a+3*a-1+a+3+a-1
        //  a+9  -1+a+3+a-1
        //  3+9-1+3+3+3-1
        //  19
        
        int i,j;
        printf("%d
    ",result);
        printf("i=%d,j=%d
    ",i,j);
        
        //3、可以用宏来定义多个语句
        M3(i, j);
        printf("i=%d,j=%d
    ",i,j);
        
        return 0;
    }
    
    //
    //  main.c
    //  18-typedef和#define的区别
    //
    //  Created by apple on 15/1/11.
    //  Copyright (c) 2015年 itcast. All rights reserved.
    //
    
    #include <stdio.h>
    #define INT1 int*   //定义一个宏,宏名是INT1
    typedef int* TINT;  //int起一个别名 TINT
    int main(int argc, const char * argv[]) {
        
        int num = 10;
        //使用宏定义变量
        INT1 a,b;     //int* a,b
                      //a是指针
        a = &num;
                      //b是普通的变量
        b = num;
    
        printf("a = %d,b = %d
    ",*a,b);
        
        //使用别名定义变量
        TINT a1,b1;   //int *a1;int* b1;
        
        a1 = &num;
        b1 = &num;   //a1 和 b1 都是指针
        
        printf("a1 = %d,b1 = %d
    ",*a1,*b1);
        return 0;
    }
    
  • 相关阅读:
    《Orange'S:一个操作系统的实现》与上一版之比较
    IPC
    末日帝国——Agile公司的困境 (2)
    取经学道真经验——你听过这么享受的培训吗
    数据库设计指南(五)数据库小技巧
    软件项目开发典型风险一览
    数据库设计指南(四)保证数据的完整性
    官网的Ext direct包中.NET版的问题
    软件项目开发应写的13类文档
    面试EJB常考题
  • 原文地址:https://www.cnblogs.com/aiti/p/4681760.html
Copyright © 2011-2022 走看看