文章目录
- 程序中遇到常量
- 常量指针和指针常量
程序中遇到常量
当程序中遇到常量时:
如果程序复杂,用到的常量比较多的化,不能很简单的看出某个常量时用来做什么的。
在实际中应该尽量避免产生这种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读作常量,从左往右读内容正好与之相符。