为什么是const指针而不是指向const的指针?

Why it is a const pointer rather than pointer to const?

C++ Primer 书中对类型别名的解释如下:

typedef char *pstring;
const pstring cstr = 0; // cstr is a constant pointer to char

他们说以下是错误的解释:

const char *cstr = 0;

然而,用它的原始含义替换 typedef 别名对我来说是有意义的。

在没有类型别名的正常情况下,常量指针定义为:

char *const cstr = 0;

为什么是常量指针而不是指向 const 的指针?

谁能解释清楚,因为书上好像没怎么讲清楚。

2 * 3 + 1 是 7。但是如果我先 int i = 3 + 1; 然后 2 * i 怎么会得到 8?变量不是应该换成原来的意思吗?

这是因为2 * 3 + 1被解释为(2 * 3) + 1,而2 * i2 * (3 + 1)相同。这些意味着不同的事情,并计算出不同的数字。当你给 3 + 1 一个名字时,当你使用这个名字时,它不会将数字分解回 3 + 1 以便只乘以 3.

const char *const pstring不同的原因很相似。 const char * 被解释为 (const char) * 即指向常量 char 的指针。但是 const pstringconst (char *) 相同,即指向 char 的常量指针。 pstring 本身就是一个完整的类型,当您执行 const pstring 时,它不会拆分 char * 以使 char 部分成为常量。

注意:如果你做了 #define pstring char * 那么 const pstring const char * 相同,因为宏 (#define s) 仅被视为文本替换。