const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
16 个解决方案
#1
const放*后面就是修饰那个*对应的指针。
#2
int a = 10;
const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
pi = nullptr; // pi不是const,可以赋值
*pi = 5; // 错误,*pi是const int,不能赋值
ppi = nullptr; // 错误,ppi是* const,不能赋值
*ppi = nullptr; // 错误,*ppi也是* const,不能赋值
**ppi = 5; // 错误,**ppi是const int,不嫩赋值
pppi = nullptr; // pppi不是const,可以赋值
*pppi = nullptr; // 错误,*pppi是* const,不能赋值
**pppi = nullptr; // 错误,**pppi是* const,不嫩赋值
***pppi = 5; // 错误, ***pppi是const int,不能赋值
#3
额 尝试解答一下 自己都晕了 贴一段文字 清醒清醒
int const a 和 const int a 定义常量 a
const int *a 定义指向常变量的指针
int * const a 定义指向变量的常指针
int const * a const 定义指向常变量的常指针
int const a 和 const int a 定义常量 a
const int *a 定义指向常变量的指针
int * const a 定义指向变量的常指针
int const * a const 定义指向常变量的常指针
#4
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
#5
给你一个判断原则:const 与左边最后一个声明说明符之间有多少个*号,那么就是多少级指针是const的
#6
const int *const *const ppi = π从变量名开始向左分析,首先这个ppi是一个const指针,属于顶层const,然后他指向也属于顶层const的指针,这个指针指向一个int类型常量
#7
分享一个学来的技巧,遇到const变量区分的问题,记住从右往左读变量的意思就行了。
const int *a
定义指向常变量的指针,先是*a为int型指针,再是const ,const修饰的是(int *a,为指针指向的内容,所以不变的是指针指向的内容)。
所以整个意思就是 指向常变量的指针
const int *a
定义指向常变量的指针,先是*a为int型指针,再是const ,const修饰的是(int *a,为指针指向的内容,所以不变的是指针指向的内容)。
所以整个意思就是 指向常变量的指针
#8
第一行,是正常见到的程序。很好理解。
后面两行,你要理解的意义在哪里? 这样的代码,写出来,又有谁要去维护?
后面两行,你要理解的意义在哪里? 这样的代码,写出来,又有谁要去维护?
#9
const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
记住一个重点就是const离谁近谁就是const
第一个离*近没说明* 是const,也就是是指针指向的内容不可变
第二个例子,每个* 前面都有,ppi变量也有,说明指针不可变,内容不可变
第三个例子,三个* 前面有const,但是变量pppi没有const,说明最后一级指针是可以移动的
#10
这是在钻牛角尖学习C++有必要纠结这些烧脑的问题么,我觉得与其浪费精力在解决这些无用的语法问题上,不如在提高代码的可读性上多投入些精力。毕竟现代编程尤其是大型编程,更具可读性的代码其重要性已经超越了对算法的优化。
#12
我给点个赞,稍微有一点不准确
int a = 10;
const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
pi = nullptr; // pi不是const,可以赋值
*pi = 5; // 错误,*pi是const int,不能赋值
ppi = nullptr; // 错误,ppi是const int *const *const,不能赋值 //改一下
*ppi = nullptr; // 错误,*ppi也是const int *const,不能赋值 //改一下
**ppi = 5; // 错误,**ppi是const int,不嫩赋值
pppi = nullptr; // pppi不是const,可以赋值
*pppi = nullptr; // 错误,*pppi是const int *const *const,不能赋值 //改一下
**pppi = nullptr; // 错误,**pppi是const int *const,不嫩赋值 //改一下
***pppi = 5; // 错误, ***pppi是const int,不能赋值
#13
为何我有点不想解释了呢???反正楼上也解释了
#14
const对于提高可读性也是有帮助的,怎么就是无用的无法问题?
而且实际你不会这么写并不代表你不需要知道。
另外可读性和代码优化也并不冲突,不是把代码压缩得密密麻麻,写得乱七八糟就叫优化。
#15
嗯我没把指针指向的类型写出来,感觉这样清晰一点,不然新手看到“ppi是const int *const *const”,还是不知道到底是什么。
#16
有道理
#1
const放*后面就是修饰那个*对应的指针。
#2
int a = 10;
const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
pi = nullptr; // pi不是const,可以赋值
*pi = 5; // 错误,*pi是const int,不能赋值
ppi = nullptr; // 错误,ppi是* const,不能赋值
*ppi = nullptr; // 错误,*ppi也是* const,不能赋值
**ppi = 5; // 错误,**ppi是const int,不嫩赋值
pppi = nullptr; // pppi不是const,可以赋值
*pppi = nullptr; // 错误,*pppi是* const,不能赋值
**pppi = nullptr; // 错误,**pppi是* const,不嫩赋值
***pppi = 5; // 错误, ***pppi是const int,不能赋值
#3
额 尝试解答一下 自己都晕了 贴一段文字 清醒清醒
int const a 和 const int a 定义常量 a
const int *a 定义指向常变量的指针
int * const a 定义指向变量的常指针
int const * a const 定义指向常变量的常指针
int const a 和 const int a 定义常量 a
const int *a 定义指向常变量的指针
int * const a 定义指向变量的常指针
int const * a const 定义指向常变量的常指针
#4
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
#5
给你一个判断原则:const 与左边最后一个声明说明符之间有多少个*号,那么就是多少级指针是const的
#6
const int *const *const ppi = π从变量名开始向左分析,首先这个ppi是一个const指针,属于顶层const,然后他指向也属于顶层const的指针,这个指针指向一个int类型常量
#7
分享一个学来的技巧,遇到const变量区分的问题,记住从右往左读变量的意思就行了。
const int *a
定义指向常变量的指针,先是*a为int型指针,再是const ,const修饰的是(int *a,为指针指向的内容,所以不变的是指针指向的内容)。
所以整个意思就是 指向常变量的指针
const int *a
定义指向常变量的指针,先是*a为int型指针,再是const ,const修饰的是(int *a,为指针指向的内容,所以不变的是指针指向的内容)。
所以整个意思就是 指向常变量的指针
#8
第一行,是正常见到的程序。很好理解。
后面两行,你要理解的意义在哪里? 这样的代码,写出来,又有谁要去维护?
后面两行,你要理解的意义在哪里? 这样的代码,写出来,又有谁要去维护?
#9
const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
记住一个重点就是const离谁近谁就是const
第一个离*近没说明* 是const,也就是是指针指向的内容不可变
第二个例子,每个* 前面都有,ppi变量也有,说明指针不可变,内容不可变
第三个例子,三个* 前面有const,但是变量pppi没有const,说明最后一级指针是可以移动的
#10
这是在钻牛角尖学习C++有必要纠结这些烧脑的问题么,我觉得与其浪费精力在解决这些无用的语法问题上,不如在提高代码的可读性上多投入些精力。毕竟现代编程尤其是大型编程,更具可读性的代码其重要性已经超越了对算法的优化。
#11
一般的的const 还好, 这个理解不了,求告诉下怎么分析最后两个表达式。希望具体点
const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
你可以看看这个通用的理解方法
http://blog.csdn.net/albertsh/article/details/64440740
#12
int a = 10;
const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
pi = nullptr; // pi不是const,可以赋值
*pi = 5; // 错误,*pi是const int,不能赋值
ppi = nullptr; // 错误,ppi是* const,不能赋值
*ppi = nullptr; // 错误,*ppi也是* const,不能赋值
**ppi = 5; // 错误,**ppi是const int,不嫩赋值
pppi = nullptr; // pppi不是const,可以赋值
*pppi = nullptr; // 错误,*pppi是* const,不能赋值
**pppi = nullptr; // 错误,**pppi是* const,不嫩赋值
***pppi = 5; // 错误, ***pppi是const int,不能赋值
我给点个赞,稍微有一点不准确
int a = 10;
const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
pi = nullptr; // pi不是const,可以赋值
*pi = 5; // 错误,*pi是const int,不能赋值
ppi = nullptr; // 错误,ppi是const int *const *const,不能赋值 //改一下
*ppi = nullptr; // 错误,*ppi也是const int *const,不能赋值 //改一下
**ppi = 5; // 错误,**ppi是const int,不嫩赋值
pppi = nullptr; // pppi不是const,可以赋值
*pppi = nullptr; // 错误,*pppi是const int *const *const,不能赋值 //改一下
**pppi = nullptr; // 错误,**pppi是const int *const,不嫩赋值 //改一下
***pppi = 5; // 错误, ***pppi是const int,不能赋值
#13
为何我有点不想解释了呢???反正楼上也解释了
#14
这是在钻牛角尖学习C++有必要纠结这些烧脑的问题么,我觉得与其浪费精力在解决这些无用的语法问题上,不如在提高代码的可读性上多投入些精力。毕竟现代编程尤其是大型编程,更具可读性的代码其重要性已经超越了对算法的优化。
const对于提高可读性也是有帮助的,怎么就是无用的无法问题?
而且实际你不会这么写并不代表你不需要知道。
另外可读性和代码优化也并不冲突,不是把代码压缩得密密麻麻,写得乱七八糟就叫优化。
#15
我给点个赞,稍微有一点不准确
int a = 10;
const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
pi = nullptr; // pi不是const,可以赋值
*pi = 5; // 错误,*pi是const int,不能赋值
ppi = nullptr; // 错误,ppi是const int *const *const,不能赋值 //改一下
*ppi = nullptr; // 错误,*ppi也是const int *const,不能赋值 //改一下
**ppi = 5; // 错误,**ppi是const int,不嫩赋值
pppi = nullptr; // pppi不是const,可以赋值
*pppi = nullptr; // 错误,*pppi是const int *const *const,不能赋值 //改一下
**pppi = nullptr; // 错误,**pppi是const int *const,不嫩赋值 //改一下
***pppi = 5; // 错误, ***pppi是const int,不能赋值
嗯我没把指针指向的类型写出来,感觉这样清晰一点,不然新手看到“ppi是const int *const *const”,还是不知道到底是什么。
#16
我给点个赞,稍微有一点不准确
int a = 10;
const int * pi = &a;
const int *const *const ppi = π
const int *const *const *pppi = &ppi;
pi = nullptr; // pi不是const,可以赋值
*pi = 5; // 错误,*pi是const int,不能赋值
ppi = nullptr; // 错误,ppi是const int *const *const,不能赋值 //改一下
*ppi = nullptr; // 错误,*ppi也是const int *const,不能赋值 //改一下
**ppi = 5; // 错误,**ppi是const int,不嫩赋值
pppi = nullptr; // pppi不是const,可以赋值
*pppi = nullptr; // 错误,*pppi是const int *const *const,不能赋值 //改一下
**pppi = nullptr; // 错误,**pppi是const int *const,不嫩赋值 //改一下
***pppi = 5; // 错误, ***pppi是const int,不能赋值
嗯我没把指针指向的类型写出来,感觉这样清晰一点,不然新手看到“ppi是const int *const *const”,还是不知道到底是什么。
有道理