zoukankan      html  css  js  c++  java
  • c语言关键字-const

    1. const即constant的缩写,它是定义只读变量的关键字,或者说它是定义常变量的关键字。

          虽然const定义的是变量但又相当于常量,说它是常量又有变量的属性,所以叫常变量。

          const定义的变量是不允许改变的,不允许给他重新赋值,必须在定义的时候赋值。



      2.const关键字作用

    • const用于定义常量,const定义的常量编译器可以对其进行数据静态类型安全检查
    • const修饰函数形参,当输入参数为用户自定义参数和抽象数据类型时,应该将值传递转换为const&传递,可以提高效率。因为值传递需要进行变量的复制占用空间与时间,而使用引用传递不会产生临时对象可以提高效率。
    • const修饰函数的返回值,如给指针传递的函数返回值加const则返回值不能被直接修改,且返回值只能复制给加const修饰的同类型指针。
    • const修饰类的函数成员,任何不会修改数据成员的函数都应用const修饰,这样当不小心修改了数据成员或调用了非const成员函数时,编译器会报错。
    • 使用const可以保护被修饰的东西防止被意外修改,增强程序的健壮


      3.const关键字的用法

    • const修饰局部变量
      • 1 const int n=5;
        2 int const n=5;

         两种写法一样,都表示变量n的值不能再改变了。

      • const char* str="sadbha"

         如果没有const修饰我们可以修改str[2]='g'这样的赋值语句,这样的操作会导致对只读内存区域的赋值,然后程序会停止。有了const,这个错误就会在编译的时候检查出来。

    • 指针常量与常量指针
      • 常量指针:指指针指向的内容是常量
      • 指针常量:指指针本身是个常量,不能再指向其他的地址
      • const int *p;  //p可变,p指向的内容不可变
        int const *p;  //p可变,p指向的内容不可变
        int *const p;  //p不可变,p指向的内容可以变

        记忆与理解方法:const离哪个近就是修饰哪个的 第一个const修饰*p
           第二个const修饰*p
        第三个修饰p

      • 1.对于常量指针,是不能通过这个指针修改变量的值,但是可以通过其他的引用修改变量的值。
        2.常量指针指向的值不可以变但常量指针可以指向其他的地址。
        • 1 int a=5;
          2 const int *n=&a;
          3 a=6;
        • 1 int a=5;
          2 int b=6;
          3 const int *n=&a;
          4 n=&b;
    • const修饰函数的参数
      • const修饰函数的参数,则是不希望这个参数值被函数体内意外改变时而使用。例如void Fun(const int i);则是告诉编译器i 在函数体中不能被改变,从而防止了一些无意的或者是错误的修改。
      • 当输入参数为自定义数据类型时可以将值传递改变为“const&”传递,这样可以改为引用传递,而且加了const后还不会改变变量的值
    • const修饰函数的返回值
      • 给指针传递的函数返回值加const则返回值不能被直接修改,且返回值只能复制给加const修饰的同类型指针。
      • 1 const char *GetString(void);
        2 
        3 char *str=GetString();  //出现错误只能赋值给加const修饰的同类型指针
        4 const char *str=GetString;   //不会出现错误,正确。



    4.const 与#define区别

    • #define预编译指令只是对值进行简单的替换,#define定义的对象没有数据类型,所以编译器不会对其进行类型安全检查
    • const定义的是一个变量,常变量,有数据类型,编译器会对其进行类型安全检查
    • #define定义的宏在编译后就不存在了,他不占用内存,系统只会给变量分配内存。而const定义的常变量具有变量的属性,有类型,占用内存。
    • 使用const可以保护被修饰的东西防止被意外修改,增强程序的健壮性。


    • const修饰全局变量存储在只读数据段,第一次使用时为其分配内存空间,程序运行结束后释放
    • const修饰局部变量存储在栈中,代码块运行结束释放
    • 使用const变量可以节省空间减少不必要的内存分配
    • 使用const变量提高了效率。编译器通常不会为普通的const变量分配内存空间,而是将他们保存在符号表中,这是使得他它成为一个编译期间的常量,没有了存储与都内存的操作,效率比较高。
  • 相关阅读:
    2013-11-26的工作-【工作日志】
    grails下的httpclient
    如何解决grails2.3.2中不能运行fork模式
    华丽的bootstrap3碰到土鳖IE6
    grails中报Cannot create a session after the response has been committed异常的解决办法
    听自己喜欢的文章-【睿读】
    动态规划----完全背包问题
    动态规划----最长公共子序列(LCS)问题
    动态规划----数字三角形问题
    动态规划----钢条切割问题
  • 原文地址:https://www.cnblogs.com/southcyy/p/10165507.html
Copyright © 2011-2022 走看看