const int* 和 const int * const 和 int const * 的区别
const int*和const int * const和 int const *的区别
int const *是一个指向常量整数的指针
指向了一个不能被修改的值但是指针指向的地址可以改变
const在数据类型的一侧,所以可以放在int的前面const int *,(从c++ prime了解到)
1 | |
int * const是一个指向整数的常量指针
- 指针指向的地址不能被改变,但是地址中的值可以被改变
1 | |
const int * const是一个指向常量整数的常量指针
- 第一个
const可以位于数据类型的任意一侧,所以等效写法int const * const - 此指针既不能指向新地址,也不能修改指向的值
1 | |
这2句报错也能很好的告诉我们
只读变量
只读位置
螺旋规则解释语法
- 从变量名开始,然后顺时针移动到下一个指针或类型。重复直到表达式结束 (原文中的图)
int const * const var: 变量是-> const -> 是指针 (const pointer)->指向const->int (const int 指向常量值)
- 可看做从右到左
因此
int const *指针指向常量intint * const常量指针指向intint const * const常量指针指向常量int
int ** const常量指针指向一个指针且该指针指向一个intint * const *指针 指向 一个常量指针且该指针指向intint const **:指针 指向一个指针且该指针指向常量int, 看做const int **更好理解int * const * const常量指针指向一个常量指针且该指针指向int
暂时忽略
c++中的顶层const和底层const没有记错的话:
c标准中const是从c++标准中引入的…….
由于c++引用原因,int &a = b;,导致我经常int* p;这样声明指针
- 这种声明很容易导致混淆
int* p,q;:
长时间写
c++,会习惯性理解成声明了2个指针但实际上是
p是指针q是int尽管这种写法是正确的,
一般都这样写
int *p,q;,不容易导致混淆
- 上面的写法属于习惯问题,编译器并不会报错
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!