const
使用const关键字来修改变量声明和初始化,创建常量的通用格式如下:
const type name = value;
const int Months = 12;
值得注意的是 const int a 和 int const a 是等价的,习惯上把const放在前面
const 与指针
上图为指针和const结合的常见的几种类型
- int *p : a pointer to int
- const int *p / int const *p : a pointer to const int/ int const
- int *const p : a constant pointer to int
- const int *const ptr : a constant pointer to const
常量就是在运行中不会被修改的量,那么从不会被修改的角度来看那几种情况呢?
- 不能利用指针去修改指向的值 但是其本身的值可以改变
- 不能修改指针的值 ,也就是 指针本身为常量,防止改变指针指向的位置
- 既不能修改指针本身的值,也不能去利用指针修改指向的对象的值
小结一下 如下图:
另外也可以根据四象限图来记忆:
记忆规则之中文顺序法:
不管怎么样 int * p 三者的顺序是不变的 只不过看 const放在哪个位置
如果要修饰指针 那一定是放在 指针后面的
如果要修饰变量 那么可前可后,一般习惯放在前面
所以值记忆住一个,就很好区分其他的了。那么记忆哪一个呢?
记住: 指针常量 -> 指针本身的值不可以修改 -> 指针就是* 常量就是 const -> 指针常量 *const
记忆规则之英文逆序法:
所以:
- const int * p : a pointer to const int 一个指针 指向 const int
- int *const p : a constant pointer to int 一个指针常量 指向 int
- const int *const p : a constant pointer to const int
更加复杂:
- int **const : a constant pointer to pointer to an int
- int const : a pointer to a constant pointer to an int
- const int ** : a pointer to a pointer to a const int
- int *const * const : a const pointer to a const pointer to an int
总结
- const 若要修饰指针,一定得放在后面 ,即为 *const : a constant pointer 指针常量
- const 若要修饰变量,可前可后,但是建议放在前面,如const int 一个整形常量
- int *const p : a const pointer to int 指向整形的 指针常量
- const int* p : a pointer to const int 指向const int 的 指针 常量指针
参考资料: https://www.geeksforgeeks.org/difference-between-const-int-const-int-const-and-int-const/