Day11

作者: 喝酸奶要舔盖__ | 来源:发表于2018-09-10 13:57 被阅读0次

    共用体

        /*
         * 共用体
         *
         * 共用体的格式:
         * union 共用体名称{
         *    数据类型 属性名称;
         *    数据类型 属性名称;
         * }
         *
         * 共用体的特点:
         *   结构体的每个属性会占用一块单独的存储空间,而共用体
         * 所有属性都共用同一块存储空间
         *   只要其中一个属性发生了变化,其他的属性都会受到影响
         */
    
        union Test{
          int age;
          char ch;
        };
    
        union Test th;
        th.age = 33;
        printf("%i\n", th.age); //33
        th.ch = "b";
        printf("%i\n", th.age); //104
    

    枚举

    • 枚举的基本概念
        /*
         * 枚举作用:
         *   用于提升代码的阅读性,一般用于表示几个固定值,也叫作枚举常量
         * 如果某些变量的取值是固定的,那么可以考虑使用枚举来实现
         *
         * 枚举格式:
         * enum 枚举类型名称{
         *    取值1,
         *    取值2
         * };
         *
         * 注意: 枚举是用逗号隔开的
         *       枚举的取值一般以K开头,然后后面跟上枚举类型,后面在跟上表达式含义
         * 主要是为了有多个枚举的时候,方便区分
         * 含义你想表达的意思
         */
    
        enum Gender{
            KGenderMale, //0
            KGenderFemale  //1
        };
    
        struct Person
        {
            char *name;
            int age;
            enum Gender gender;
        };
        struct Person p1;
        struct Person p2;
        p1.gender = KGenderMale; //枚举的取值一般以K开头,然后后面跟上枚举类型,后面在跟上表达式含义
        p2.gender = KGenderFemale;
        //枚举的取值: 默认是从0开始,依次递增,也可以手动取值
        printf("%i\n",p1.gender); //0
        printf("%i\n",p2.gender); //1
    
    • 枚举的作用域
      枚举作用域和结构体作用域一样, 定义枚举变量和结构体一样

    局部变量和全局变量

    • 局部变量
        /*
         * 局部变量:
         *  定义在{}中,函数中,形参都是局部变量
         * 作用域: 从定义那行开始,直到遇到}结束或者遇到return结束
         * 存储位置: 局部变量会存储在内存的栈区,会随着作用域的结束而释放
         * 
         * 注意点: 相同的作用域不能出现同名的局部变量
         *         如果在不同的作用域内有相同的名称的变量,那么在访问时候,内部
         *         会覆盖外部的(就近原则)
         */
        
        int num = 0;
        {
            int num2 = 0;
        }
        return 0;
    }
    void test(int a){ //形参也是局部变量
        
    }
    
    • 全局变量
        /*
         * 全局变量:
         *  定义在{}外面或者函数外面的变量,都是全局变量
         * 作用域: 从定义那行开始,直到文件末尾
         * 存储位置: 全局变量会存储在内存的静态区中,会随着程序的启动而分配内存存储空间
         * ,随着程序的结束而释放
         * 
         * 注意点: 如果有多个同名的全局变量,那么也只会分配一次存储空间,多个同名的全局变量
         * 共用一块存储空间
         * 
         */
    int num = 1; //全局变量
    void test(int a){ //形参也是局部变量
    }
    

    static关键字

    • static修饰局部变量
    #include <stdio.h>
    void test();
    int main()
    {
        /*
         * static关键字
         * 对局部变量:
         *
         * 如果利用static 修饰局部变量,那么会将局部变量存储区从栈区转移到静态区
         * 静态区只有程序结束时候才会释放
         *
         * 应用场景: 优化代码,提升代码的效率
         *
         */
        test();
        test();
        test();
        return 0;
    }
    
    void test(){
        static int num = 0; // 局部变量
        num++;
        // 如果不加static输出 1 1 1
        // 如果添加static输出 1 2 3
        printf("num = %i\n", num);
    }
    
    • 对全局变量的作用
         * static对全局变量的作用
         * 定义一个内部的全局变量
         * 1. 该变量只能在定义的文件中使用,不能在其他文件中使用,
         * 并且该变量只会独占一块内存空间
         * 
         * 全局变量特性:
         *   同名的全局变量会共享一块内存空间,哪怕不是一个文件中的同名全局变量
         * 也会共享一块内存空间,这样会导致数据污染
         * 
         * 注意点: 
         * 局部变量如果没有初始化,里面存储的是垃圾数据
         * 全局变量如果没有初始化,系统会自动初始化为0
    

    extern关键字

    声明一个全局变量, 代表告诉编译器我在其它地方定义了这个变量, 你可以放心使用

    #include <stdio.h>
    
    int main()
    {
        extern int num; // 声明我们有名称叫做num变量
        num = 998; // 使用时已经有对应的存储空间
        printf("num = %i\n", num);
        return 0;
    }
    int num; // 全局变量, 程序启动就会分配存储空间
    

    extern和static对函数的作用

    #include <stdio.h>
    
    int main()
    {
        /*
         * extern和static对函数的作用
         * 1. 如果利用extern修饰函数,代表这是一个外部函数,其他文件也可以使用
         * 默认情况下是这样,所以此处可以不记
         *
         * 2. 如果利用static修饰函数,代表这是一个内部函数,只能在当前文件中使用
         * 如果一些函数不想给外界使用,就可以函数添加static
         *
         * 注意点: extern和static必须写在函数的实现中才有用,不能写到函数的声明中
         * 并且如果一个函数已经被声明static,那么在.h文件中就不要编写该函数的声明了
         * 因为外部无法使用
         */
    
    
        return 0;
    }
    //只能在这个文件中使用
    static void test(){
    
    }
    

    企业开发注意点

    在企业开发中,代码不是全部写在一个文件中,这样不利于阅读和后续维护
    
    企业多人开发
      一般情况下会将业务逻辑代码,编写到.c文件中,同时会将.c文件中需要暴露给外界使用的方式声明到一个.h文件中,.h文件中只写函数声明
    
    #include作用
      将后面的指定文件的内容拷贝到当前的文件中
    <>从系统的环境变量中去拷贝,一般情况下只有用到系统函数才会使用#include<>
    ""从指定的路径中去拷贝,一般情况下使用同事的/自己编写的.h文件都用#include"ds.h"
    

    相关文章

      网友评论

          本文标题:Day11

          本文链接:https://www.haomeiwen.com/subject/rfhsgftx.html