zoukankan      html  css  js  c++  java
  • const使用

    一、const关键字简介

    const是单词constant的简写,若一个变量前用const修饰,就意味着该变量里的数据可以被访但不能被修改,即该变量是“只读”的。

    二、const关键字的用法

    1. 用于修饰局部变量

    例如:

    const int n = 5;
    int const n = 5;/*二者是等价的,均表示变量n的值不能被改变了*/
    注意:在使用const修饰变量时,一定要给变量初始化,否则之后就不能赋值了!

    2. 常量指针与指针常量

    常量指针 是说指针指向的内容是常量,例如:

    const int *n;
    int const *n; /*二者等价*/
    注1:常量指针是说不能通过这个指针改变变量的值,但是可以通过其他引用来改变变量的值,例如下面这种:

    int a = 5;
    const int *n = &a;
    a = 6;
    注2:常量指针的值不能改变,但这不意味着指针本身不能改变,常量指针可以指向其他的地址,例如下面这种:

    int a = 5;
    int b = 6;
    const int *n = &a;
    n = &b;
    指针常量 是说指针本身是个常量,不能再指向其他的地址,例如:

    int * const n; /*指针常量*/
    注:指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的,可以通过其他指向该地址的指针来修改,例如:

    int a = 5;
    int *p = &a;
    int * const n = &a;
    *p = 8;
    常量指针、指针常量一会儿就把人绕晕了,那么如何区分他们呢?别急,请往下看。

    一个简单的方法是看 * 的位置,如果我们将 * 读作“指针”,将 const 读作“常量”的话,则正好可以根据二者的前后顺序来辨别,例如:

    int const *n; /*是常量指针*/
    int * const n;/*是指针常量*/
    指向常量的常指针:指针指向的位置不能改变且也不能通过这个指针改变变量的值。(但是仍然可以用其他的普通指针改变变量的值)

    const int * const p;/*指向常量的常指针*/
    3. const修饰函数的参数

    1)防止修改指针指向的内容,如:

    void StringCopy(char *dst, const char *src);
    2)防止修改指针所指向的地址,如:

    void swap(int * const p1, int * const p2);
    4. const修饰函数的返回值

    例如,若有如下函数:

    const char* GetString(void);
    当用以下语句来接收函数返回值时将出错:

    char *str = GetString(); /*错误*/
    应当改写为:

    const char *str = GetString(); /*正确*/
    三、const与宏定义#define的区别

    宏定义只是对值进行简单的替换,不进行类型检查;而const有具体的类型,在编译阶段会进行类型检查
    #define宏是在预处理阶段展开,而const常量在编译运行阶段
    const定义的常量在程序的运行过程中只有一份拷贝(因为是全局的只读变量,故存在静态区);而#define定义的常量在内存中有若干个拷贝
    const效率高,因为编译器通常不为普通const常量分配内存,而是保存在符号表中,没有了存储与读取的操作,效率很高

    参考博客:https://blog.csdn.net/M_joy666/article/details/80470656

  • 相关阅读:
    windows批处理命令笔记
    linux 配置互访免密登录 sshkeygen
    jenkins 中 pipeline 管理部署服务到k8s 插件总结
    求教:Net环境导致WPF程序无法启动
    读《C程序设计语言》笔记11
    求教:.Net Framework 3.5 SP1安装失败
    设计模式
    flash基本操作二库面板和元件创建
    AUTOCAD自学教程一
    flash基本操作
  • 原文地址:https://www.cnblogs.com/home123/p/15576408.html
Copyright © 2011-2022 走看看