一个指向整型常量指针的指针

4

有人能帮我解释一下以下程序中的一个点吗? 我写了下面的程序来理解int * const * var;是什么意思。

#include "iostream"

using namespace std ;

int main(){

int a = 2;

int  * const   x = &a;
int * const * p = &x;

cout << **p;
return 0;
}

这个程序的输出结果是 2。
我关心的重点是,p 是指向常量指针的指针,这就是我的使用方式,但我一直学习到存储指针需要一个指向指针的指针。那么这个程序是如何工作的呢?我不应该使用一个指向指针的指针吗?
int * const **P

这意味着P可能包含某个指针的地址。

我不知道我的代码为什么能工作 :)


p 已经是一个指向指针的指针。只需要查看它的声明即可。 - The Paramagnetic Croissant
4个回答

7
  1. int * const 是指向 int 的"const 指针"。
  2. int * const * 是指向 "const 指针" 的指针,该指针指向 int

类型 2 是指向指针的指针。更具体地说,它是指向 "const 指针" 的指针。这很好,因为你想要指向的指针(x)是 const 的。由于 x 是类型 1,获取它的地址会给出类型 2 的指针。

int * const ** 将是 "指向指向 const 指针的指针,该指针指向 int"。数一下有多少个 "指针"。三个!实际上,如果你使用 &p 获取 p 的地址,就会得到这个东西。


3
指针只需要练习一下就能够很快变成第二天性质。我脑海里有着箭头在小盒子之间指来指去的画面。 - Joseph Mansfield
2
但请记住,一旦您能看到三颗星,就是休息一天的时候了。 - Daniel Fischer
6
「到第七天,上帝使用了一个指向另一个指针的指针;所以在第七天,他从所有的工作中休息了。然后,上帝祝福了第七天,并使它成为神圣的,因为他在那一天停止了所有他所做的间接引用。」- 我很确定是这样说的。 - Joseph Mansfield

2
  • 要存储指针,您需要指向指针的指针。

显然您认为const指针不是指针。您错了。const只是不可变性的指示器。因此,指向const指针的指针实际上是指向指针。


0

x 是类型为 int* const 的变量,并假设 x 是某个类型的 ABC

因此,指向 x 的指针声明为 ABC *p=&x;

这相当于 int* const *p=&x;


-1

我认为这有助于直觉理解语句。 用指针替换*,然后倒着读语句。


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