为什么它是一个常量指针而不是指向常量指针

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

本文关键字:常量 指针 为什么 一个      更新时间:2023-10-16

在C++入门书中,有一个关于类型别名的解释:

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

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

const char *cstr = 0;

但是,将 typedef 别名替换为其原始含义对我来说是有意义的。

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

char *const cstr = 0;

为什么它是常量指针而不是常量指针?

谁能用明确的术语解释,因为这本书似乎没有澄清太多。

2 * 3 + 1是7。但是,如果我做int i = 3 + 1;然后2 * i它给出 8 个,为什么呢?变量不应该被替换为其原始含义吗?

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

const char *const pstring不同的原因非常相似。 const char *被解释为(const char) *,即指向常量字符的指针。但const pstringconst (char *)相同,即指向字符的常量指针。 pstring本身就是一个完整的类型,当你这样做时const pstring它不会拆分char *以使char部分恒定。

注意:如果您这样做#define pstring char *那么const pstring将与const char *相同,因为宏(#define s(仅被视为文本替换。