关键字const——const char*和char* const

概述

关键字const一般用来修饰定义常量。使用const修饰的变量就不能被更改了。这是因为在编译时,编译器不会为被const修饰了的变量分配储存空间。而是直接保存在符号表中。这样在使用const修饰的变量时,也没有了保存和访问内存的操作。效率也会更高一点点。
这就是const关键字的大体上的作用。
一般来说我们定义的变量用const修饰是没有区别的,例如

int const a=2;
const int b=2;

这里的a和b都是一个用const修饰的int型变量。拥有常量的性质。我们接下来就称为“常变量”。

const char* 和char* const

当然,我们平时需要读代码时,遇到的就不仅仅是简单的用const修饰变量的。
但是面对const修饰的变量时,我们只需要记住:const一直修饰于左边的东西,如果左边没有可以修饰的东西,才会修饰在右边。

例如:

const char* a// const只有右边有可修饰的内容
//所以const修饰最近的char 然后*又修饰于(const char)整体
//所以这是一个指针,指向一个“const char”

char* const b//const会修饰左边的内容
//所以const修饰最近的*, 这个指针是一个字符指针
//所以这是一个const修饰的指针,指向一个char

/*这两者的区别在于:
a是可以指向另一块内存的,但是内存里保存的内容是不可修改的。
b是一个不可修改的指针,只能指向确定的一个内存,
但是这个内存里的内容是可以修改的。
*/

const的修饰规则大概就是这样的。所以我们平时写代码时,注意一下这样的规则,将尽量将const写在需要修饰的内容的右边,这样会让代码的可读性变得更好。符合这个规则的定义可以直接无脑从右往左读。
例如:

int* const// 一个const指针指向int
int const*// 一个指针指向const int
int const * const//一个const 指针指向const int
int *const *//一个指针指向一个const 指针
//这个cosnt 指针指向一个int

define 和 const

简单来说,define是宏定义。会在预处理阶段进行替换,例如我们写了这样的一行:

#define TYPE int

在预处理时,编译器会把代码中的所有TYPE替换为int。
相信大家也都听过如果需要的话尽量使用const。
所以我们来直接说使用define的不足。

  • 使用define定义的宏因为只是简单的替换,时没有类型检查的。
  • 也是因为define在预处理阶段就做了替换,所以是无法进行调试的。
    这是define的缺点,也就是const的优点。因为const修饰的常变量是有具体的类型的。所以会进行严格的类型检查。同时也能保护被修饰的变量不会被串改。

define也可以定义一些宏函数。虽然在编写时提供了一些方便。但是宏函数也是会在使用的地方进行展开。如果不仔细的话很容易出现一些不容易被发现的错误。
C++中有内联函数可以使用。所以大家就都会说尽量不要使用define。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值