- 问题由来
某天自我感觉良好的我,在QQ群发现大佬们的聊天东西,看了一下没怎么在意,仔细一看这都是什么啊一大坨,关键是我还不会,岂可休,就有了这篇文章!
// 这是是大佬发的东西。
// 这些const到底是指针不可修改,还是指针指向内存中存储的值不可修改?
const int p;
const int *p;
int const* p;
int * const p;
const int * const p;
int const * const p;
- 结论
通过一些实践和网上索搜来的资料,得到以下结论:
*操作符在const左边,那么锁指针,不锁指针值。
*操作符在const右边,那么锁指针值,不锁指针。
*操作符的左右都有const,那么锁指针、指针值。
- 实践
#include <iostream>
using namespace std;
int main(){
int a = 30, b = 40;
// Test 1:
const int p = a; // 这里p单纯是一个常量,值不可修改。
cout<<p<<endl; // 30
// p = b; // p只读不可修改
// Test 2:
const int *p = &a; // 这里*在const右边,那么是锁值,不锁指针。
cout<<*p<<endl; // 30;
p = &b;
cout<<*p<<endl; // 40;
// *p = 55; // p只读不可修改
// Test 3:
int const *p = &a; // 同样在右边
cout<<*p<<endl; // 30;
p = &b;
cout<<*p<<endl; // 40;
// *p = 55; // p只读不可修改
// Test 4:
int * const p = &a; // *在const左边,锁指针不锁值
cout<<*p<<endl; // 30;
*p = 55;
cout<<*p<<endl; // 55;
// p = &b; // p只读不可修改
// Test 5:
/*
锁值锁指针,从第一个const来看*操作符在右边,那么锁值不锁指针,从第二个const来看*操作符在左边,那么锁指针不锁值,两者合并,指针和值都不可修改。
*/
const int * const p = &a;
cout<<*p<<endl; // 30;
// p = &b; // p只读不可修改
// *p = 55; // p只读不可修改
// Test 6:
/*
同上锁值锁指针,从第一个个const来看*在右边锁值,第二个const来看*在左边,锁指针。
*/
int const * const p = &a;
cout<<*p<<endl; // 30;
// p = &b; // p只读不可修改
// *p = 55; // p只读不可修改
return 0;
};
搞明白指针,真的很重要o,借用大佬的话,这些都是基础啊,哭泣脸。
从上面的例子来看,目前来说结论是没问题的,真希望自己以后也能有与群里大佬谈笑风生的时候😂。
ps: 博主还是新手村打B的小萌新,如果文章有误请指出,谢谢。