如题,对于C/C++初学者来说指针是不好更理解与使用的,如果在加上常量修饰符就更晕菜了。如果有一段时间不接触这三个名词的话 ,有时候也是反应还过来的!所以还是需要经常要思故而知新一下。如下所示,是对于常量与指针的快速记忆指引(来自hackingcppp pointers)
从右到左扫(分析),const 跟着(修饰)谁就对谁起作用!(const的作用就是不可变),const修复指针,标示指针的值不可变,指针的值不可变意味着它只能指向某个变量,const修复类型,标示指针指向的变量的值不能变,需要注意这里的变量的值不可变仅仅是指不能通过指针进行求值操作去改变该变量的值,而通过变量名去改变变量的值还是可以的。
// 从右到左,一开始是* 即指针没有被 const修复,然后是const 接着 T,即T被const修饰了,这个情况下称之为指针常量,指针本身可能变,但不能通过指针去修改该变量的值!
T const *
示例代码如下
#include <iostream>
int main() {
int a = 100;
int b = 200;
//1. 普通指针,指针的值可以变,通过指针也可以修改指向变量的值
int * commonP = &a;
commonP = &b;
*commonP = 300;
printf("a = %d, b = %d, commonP = %d\n", a, b, *commonP);
//2. 指针常量,不能通过指针修改批向变量的值
const int * pConst = &a;
// int const * pConst = &a;这种写法也是等价的,
pConst = &b;
//Read-only variable is not assignable
//*pConst = 400;
printf("a = %d, b = %d, pConst = %d\n", a, b, *pConst);
//3. 常量指针,只能赋值一个变量的地址,固定指向一个变量,可以通过指针修改变量的值
int * const constP = &a;
// Cannot assign to variable 'constP' with const-qualified type 'int *const'
//constP = &b;
*constP = 400;
printf("a = %d, b = %d, pConst = %d\n", a, b, *constP);
//4, 指向常量的常是指针,就剩可读了
int const * const constPconst = &a;
// Cannot assign to variable 'constPconst' with const-qualified type 'const int *const'
//constPconst = &b;
// Read-only variable is not assignable
//*constPconst = 500;
printf("a = %d, b = %d, pConst = %d\n", a, b, *constPconst);
return 0;
}
在实际项目开发中,最常见的或最常使用的是指针常量(通常用这种写法 const T * )原因通常我们不想在函数调用栈上出现型参对象的生成,同时也是不想改变实参对应的值,C++更多的使用引用常量
** 有关const的写法推荐 **