Day11

2018-09-10  本文已影响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关键字

#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"
上一篇下一篇

猜你喜欢

热点阅读