zoukankan      html  css  js  c++  java
  • 宏,全局变量和全局常量以及static,extern,const关键字

    I 全局常量


    一. 宏和全局变量的优缺点

    宏的优点

    • 在程序运行中的值永远是固定的,保证了数据的安全

    全局变量的优点

    • 不会产生很多临时的空间,所有用到的地方都访问的统一个变量

    宏的缺点

    • 宏是直接替换的,它会产生许多个临时的存储空间来存储需要替换的部分,这样会浪费内存,没有必要

    全局变量的缺点

    • 在程序运行中可能被修改

    二. 全局常量 - const关键字

    1. const的特点

    • 在编译阶段就要确定值是多少
    • 综合了宏和全局变量的优点
    • 被const修饰的变量会变成常量
    • const写在类型前还是类型后都一样
      • int const age = 20
      • const int age = 20
      • 因为const修饰右边,所以右边是哪个变量名字就修饰哪个变量

    2. const和指针

    • const只修饰右边内容,被const修饰的内容就是常量
    • 右边是什么,就是常量
    int * const p1;// p1是常量,*p1是变量
    int const * p2;// *p2是常量, p2是变量
    const int * p3;// *p3是常量,p3是变量
    const int * const p4;//p4是常量,*p4是常量
    int const * const p5;//p5是常量,*p5是常量
    

    3. const和指针的应用

    • 以后写常量就用const粘着变量名
    const int age = 20;
    const int *p = &age; //int *p = &age;
    *p = 30;// 因为age是常量,间接通过指针也不能修改age,是绝对安全的 
    
    • 注意 为了避免这种情况应该使用const int *p = &age;

    三. const和宏的选用

    • const是在编译阶段就要确定值是多少
    • 需要执行某些方法的情况就不能用const,比如全局颜色定义宏
    #define LNColorBg [UIColor redColor]
    //需要调用UIColor这个类才能设置颜色
    //而const是在编译阶段就已经确定了的,如果使用const来定义会报错
    

    II 全局变量


    • 全局变量要写在函数,方法的外面

    一.全局变量的作用域

    • 全局变量默认是全世界都能访问的

    二.extern

    • 利用extern,可以引用一个全局变量,可以在任何文件中访问这个全局变量,也能够修改
    • 注意 全局变量的名字如果重复的话,会出现访问混乱,报重复定义的错误,所以全局变量的名字不能重复
    补充:函数
    • 默认函数也是能全世界都能访问的
    • 只要利用extern引用一下就可以了,也不允许函数名重复

    三.static,const和extern总结

    1. static

    • 被static修饰的全局变量,作用域仅限于当前文件
      • 作用域改变(由全世界都能访问变为只在当前文件下才能访问)
      • 生命周期不变(整个程序运行过程中只占一份内存且都不会被销毁)
    • 被static修饰的局部变量,只会占用一块内存,在整个程序运行过程中都不会销毁,只会初始化一次
      • 作用域不变(原来在什么作用域中还在什么作用域中)
      • 生命周期改变(生命周期变长)

    2. const

    • const值修饰它右边的内容,被const修饰的内容都是常量,都不能再修改

    3. extern

    • 可以用来引用一个全局变量常量

    四.应用全局常量--Const.h/.m

    全局常量的写法

      1. 仅限于本文件访问
      • 在本文件中写下面的代码
      • static 类型 const 常量名 = 常量值;
      1. 全世界都访问
      • 在LNConst.m文件中
        • import <UIKit/UIKit.h>

        • 类型 const 常量名 = 常量值;
      • 在LNConst.m文件中
        • import <UIKit/UIKit.h>

        • UIKIT_EXTERN 类型 const 常量名;
      • 在pch文件中包含LNConst.h
    • 注意 定义结构体(如CGRect)的时候想用全局常量可以使用大括号赋值{{,},{,}}
  • 相关阅读:
    tk资料
    jQuery 1.x和jQuery 2.x的最大区别
    活得更像一个人,我的十六年学习之路——北漂18年(44)
    java中的java.util.Map的实现类
    MVC框架的优缺点
    Web Service有关术语的解释
    Java中的字节输入出流和字符输入输出流
    对称加密算法
    怎么让这4个人在17分钟内要过桥
    mysql 只给更新表的某个字段的授权
  • 原文地址:https://www.cnblogs.com/KrystalNa/p/4806015.html
Copyright © 2011-2022 走看看