C++ c++;指针到指针的常数
指向常量int的指针。我可以更改指针,但不能更改值:C++ c++;指针到指针的常数,c++,pointers,constants,const-correctness,C++,Pointers,Constants,Const Correctness,指向常量int的指针。我可以更改指针,但不能更改值: const int* a; 指向int的常量指针。我可以不更改指针,但可以更改变量的值: int* const a; 现在,如果我在处理指向指针的指针,事情会是什么样子 int** a; 我如何: a) 声明指向非常量int的非常量指针的常量指针 b) 声明指向非常量int的常量指针的非常量指针 c) 声明一个指向非常量指针的非常量指针,该指针指向常量int ? a) 声明指向非常量的指针 注意,由于上面的指针是const-限定的,因此
const int* a;
指向int的常量指针。我可以不更改指针,但可以更改变量的值:
int* const a;
现在,如果我在处理指向指针的指针,事情会是什么样子
int** a;
我如何:
a) 声明指向非常量int的非常量指针的常量指针
b) 声明指向非常量int的常量指针的非常量指针
c) 声明一个指向非常量指针的非常量指针,该指针指向常量int
?
a) 声明指向非常量的指针
注意,由于上面的指针是const
-限定的,因此必须在声明处初始化它。否则,它将无法编译
b) 声明指向常量的非指针
指向非常量的指针
c) 声明指向非常量的非指针
指向常量的指针
对于常量
指针,模式为:
T * const ptr; // const pointer to T
T * ptr; // non-const pointer to T
对于非常量
指针:
T * const ptr; // const pointer to T
T * ptr; // non-const pointer to T
然后,为最外面的指针选择上面适当的模式,并相应地为最里面的指针(即,类型中最深的指针)替换T
:
- 非
常量
指向非常量的指针
int
:T=int*
const
指向非const
int
:T=int*const
- 非
常量
指向常量的指针
int
:T=const int*
这是关于常数相对于*
的位置:如果常数在左边,那么指向的是常数
,如果常数
在*
的右边,那么指向的是常数我建议使用typedefs。大量的typedef。许多类型定义彼此建立。足够多的类型定义使你憎恨生活,以至于你在未来避免这种愚蠢。是的,区别可能很重要。不,我从来没有见过生产代码,它是至关重要的。公平地说:“我从来没有注意到代码重要的地方”,在我作为程序员的20年生涯中,其中大部分都是在C++中使用的。这是为了理解我的正确性,而不是为了编写生产代码。当我试图用动态分配的static char**foo
替换静态分配的static const char*foo[1000]
时,我确实遇到了这个问题,编译器不允许我将字符串文本分配给fooTheconst
关键字绑定到它最左边的元素。(除非const
首先出现,在这种情况下,它将绑定到其右侧的对象。)
T * ptr; // non-const pointer to T