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变量分配内存空间,而是将他们保存在符号表中,这是使得他它成为一个编译期间的常量,没有了存储与都内存的操作,效率比较高。

 

转载于:https://www.cnblogs.com/southcyy/p/10165507.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值