为什么它是const指针而不是const指针?

时间:2019-03-26 21:57:53

标签: c++ pointers types alias

在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指针?

任何人都可以用清晰的措词来解释,因为这本书似乎并没有太多说明。

1 个答案:

答案 0 :(得分:2)

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)作为文本替换。