C++中指针的声明

11
在C++中,char const *ptr=&ch;const char *ptr=&ch;有什么区别?

1
没有区别,更多信息请参考:http://duramecho.com/ComputerInformation/WhyHowCppConst.html - Akanksh
1
可能是http://stackoverflow.com/questions/2211954/difference-between-these-two-const-pointer-declarations-c的重复问题。 - starblue
1
此外,您可以使用cdecl.org - bashor
5个回答

32

它们是相同的,即 指向常量字符的指针

然而,char * const ptr 是不同的,它是一个指向(非常量)字符的常量指针

为了完整起见,const char * const ptr 是一个 指向常量字符的常量指针


1
这是一个支持将const限定符放在被限定类型后面的好例子。char const *看起来很奇怪,但与char const * const保持一致。 - Frerich Raabe

7

C++ 中没有差别。

重要的是在 * 前或者后加上 const


6

Const(常量)适用于其直接左侧的任何内容(除非那里没有任何内容,在这种情况下它适用于其直接右侧的任何内容)。所以没有区别。

char * const ptr 指的是一个指向变量值的常量指针。


2

其他答案已经涵盖了技术解决方案-你的两个例子是一样的。

许多人在处理C++中的const时更喜欢从右到左阅读。在英语中,我们喜欢想象一个常数X,而C++喜欢解析一个X const。从右到左阅读可以得到更加符合英语语言习惯的结果。

以下是一个相当极端的例子:

C const * bar(A * const, B const * const) const;

从右到左读取,这表示“一个常量函数bar,以一个指向常量A的指针和一个指向常量B的常量指针作为参数,返回一个指向常量C的指针”。请注意,这三种指针都是不同的。


1
如果有人感兴趣,Stephen C. Dewhurst的书《C++ Gotchas》讲解了这种声明指针的技巧。 - TheJuice

0

char const *ptr=&ch;const char *ptr=&ch;表示字符是常量,而指针是可变的(或者可以改变)。

但是在char * const ptr的情况下,一旦设置了指针,就不能重新分配指针。因此,它是一个指向字符字符串的常量指针。


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