c语言关键字-const

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

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

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



  2.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可以保护被修饰的东西防止被意外修改,增强程序的健壮性。

猜你喜欢

转载自www.cnblogs.com/southcyy/p/10165507.html