const 修饰的指针
程序员文章站
2024-01-01 16:21:40
...
当指针变量没有被 const 修饰时,指针可以改变所指向的普通变量的值,也可以指向其他的普通变量
//第一种, 不使用 const 修饰的指针
int a = 18;
int b = 20;
int* p1 = &a;
cout << *p1 << endl; //18
*p1 = 19; //可以通过指针改变所指向的变量的值
cout << *p1 << endl; //19
p1 = &b; //也可以改变指针所指向的变量
cout << *p1 << endl; //20
当 const 修饰符修饰的是指针变量的数据类型时,那么这个指针所指向的普通变量的值无法发生改变。
//第二种,const 修饰指针的数据类型
int a = 18;
int b = 20;
const int* p2 = &a;
//int const* p2 = &a; //和上一种相同,都是修饰数据类型
cout << *p2 << endl; //18
// *p2 = 19; //无法更改指针所指向的变量的值
p2 = &b; //可以指向其他变量
cout << *p2 << endl; //20
cout << b << endl; //20
//*p2 = 24; //也无法改变其他变量的值
当const 修饰指针变量的变量名时,这个指针变量无法指向其他的普通变量
//第三种,const 修饰指针变量
int a = 18;
int b = 20;
int* const p3 = &a;
cout << *p3 << endl; //18
*p3 = 19; //可以通过指针改变变量的值
cout << a << endl; //19
//p3 = &b; //无法将指针指向其他变量
当 const 同时修饰指针变量的数据类型和变量名时,指针所指向的普通变量的值无法被改变,同时也无法指向其他的变量
//第四种,const 同时修饰指针的数据类型和指针变量
int a = 18;
int b = 20;
//const int* const p4 = &a;
int const* const p4 = &a;
cout << *p4 << endl; //18
cout << a << endl; //18
//*p4 = 19; //无法通过指针改变变量的值
//p4 = &b; //无法将指针指向其他变量
当使用const 修饰指针时,看const 是在什么位置,如果const 离数据类型比较近,就是修饰的数据类型,此时无法通过指针变量对普通变量的值进行修改。如果const 离指针变量名比较近,就是修饰的变量名,此时该指针就无法在指向其他变量。
可以以“ * ” 号作为分隔,在“ * ” 号前面的就是离数据类型近,在“ * ” 号后面的就是离变量名近。