const char* p和char const* p之间有什么区别?

8

重复问题在这里:https://dev59.com/LnNA5IYBdhLWcg3wn_U1,而不是之前关闭的那个问题,因为后者是关于C++的。 - alk
5个回答

21

const char* p是指向常量字符的指针。

char const* p是指向常量字符的指针。

因为const charchar const是一样的,所以它们是相同的。

然而,请考虑:

char * const p是指向(非常量)字符的const指针。也就是说,您可以更改实际字符,但不能更改指向它的指针。


14

一些词语的顺序不同。

(直到const相对于星号移动,才会有语义上的差异)


2
我笑得比SO规则允许的还要多。 - Błażej Michalik

4

没有区别,因为 '*' 的位置没有变化。

1) const char *p - 指向常量字符的指针 ('p' 不可修改但指针可以修改)
2) char const *p - 也是指向常量字符的指针

然而,如果你有这样的内容:
char * const p - 这个声明了 'p' 是一个常量指针,指向一个字符 (字符 'p' 可以修改但指针不能)


2

这两种方式没有任何功能上的区别。"更加精确"的方式是char const * p,因为语义是从右往左的。


2

没有语义上的区别,但这是一种编码风格和可读性的问题。对于复杂的表达式,从右到左阅读很好:

char const ** const

是一个指向常量字符的指针的常量指针。

因此,char const *在这方面更加一致。然而,许多人喜欢const char*因为它更易读——它立即清楚它的含义。


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