天天看点

C/C++—数据的共享与保护程序中遇到常量常量指针和指针常量

文章目录

  • 程序中遇到常量
  • 常量指针和指针常量

程序中遇到常量

当程序中遇到常量时:

如果程序复杂,用到的常量比较多的化,不能很简单的看出某个常量时用来做什么的。

在实际中应该尽量避免产生这种Magic Number,可以使用C语言提供的预定义功能

# define PI 3.14
auto f[](double radius){return radius*radius*PI;};
           

预定义有自己的局限(比如不能进行类型检查)

更好的工具是const关键字,它的作用是定义一个常量

对于C风格的字符串,它是用char数组来保存的。对于一个字符串常量可以这样定义:

不能修改hello若是不小心写下*str[2]=‘x’;*这样的语句,会导致对只读内存区域的赋值,然后程序会立刻异常终止。

所以对于字符串常量,应使用const关键字来进行修饰。

加了const之后,这个错误在编译阶段就能被检查出来,不会再等到实际运行的时候才出问题。

常量指针和指针常量

  • 常量指针是指针指向的内容是常量,可以有以下两种定义方式:
const int* n;
int const* n;
           

需要注意以下两点:

常量指针说的是不能通过这个指针改变变量的值,但是可以通过其他的引用来改变变量的值。

常量指针指向的值不能改变,但是并不意味着指针本身不能改变,常量指针可以指向其他的地址

  • 指针常量是:这个指针本身是常量,不能再指向其他的地址
指针常量指向的地址不能改变,但是可以通过指针常量,来改变指针所指向的变量的值:
int a=5;
int *const n = &a;
*n = 8;
           
  • 区分常量指针和指针常量的关键就在于星号的位置,以星号为分界线,如果const在星号左边,则为常量指针,如果const在星号右边则为指针常量。

可以这样考虑:

将星号读作指针,将const读作常量,从左往右读内容正好与之相符。