C++常量双指针

10

我希望创建一个指向常量指针的常量双重指针。我从头开始制作它(当然,我在书籍和谷歌上做了一点搜索),并思考以下三个内容:

const double* cp; //pointer to a constant double
double *const cp; //constant pointer
const double *const cp; //constant pointer to a constant double

我认为下一步是编写一个常量双指针。
double **const cp;// double constant pointer

然后,我将最后两个语句结合起来并编写了


const double *const cp = arr[0];
double **const cp1 = arr ;

这里的arr是一个动态分配的二维数组。 之后我尝试验证我所做的事情,并编写了以下语句,期望所有语句都会产生错误。

**cp1 = 1;    // didn't produce error  
*cp1 = arr[4];    // didn't produce error
cp1 = new double*[5]; //produce error   

事情是这样的,我无法创建一个常量双指针,该指针指向一个常量指针,后者指向一个常量双精度值。我该如何创建它?

提前感谢。


1
推荐阅读:https://dev59.com/zFYN5IYBdhLWcg3wuaNx - user0042
“Double pointer” 在 C++ 中并不存在。你现在操作的是“指向指针”的指针。 - mlp
1个回答

25

在其中只有一个const

double **const cp1 = arr ;
//       ^^^^^

所以我不确定你为什么期望另外两个任务会产生错误。

如果你希望它在所有级别上都是const,那么你需要做的是

const double *const *const cp1 = arr;
//                         ^ cp1 is ...
//                  ^ a const pointer to ...
//           ^ a const pointer to ...
// ^ a const double

2
非常感谢您,不仅为我的问题提供了答案,还在您的代码下方用注释进行了解释。即使在书籍中,我也没有找到像这样的解释,只有例子。 - chaviaras michalis
5
我会尽力将这个答案提升至神圣地位。这是一篇非常适合初学者的关于如何阅读指针的优秀解释,我认为它应该在像这样的社区中出现更多次。 - Matias Chara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接