首页 > 解决方案 > 为什么它是一个 const 指针而不是指向 const 的指针?

问题描述

在 C++ Primer book 中,对类型别名的解释如下:

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

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

const char *cstr = 0;

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

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

char *const cstr = 0;

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

任何人都可以清楚地解释,因为这本书似乎并没有澄清太多。

标签: c++pointerstypesalias

解决方案


2 * 3 + 1是 7。但是如果我这样做int i = 3 + 1;然后2 * i它给出 8 怎么办?变量不应该换成原来的意思吗?

这是因为2 * 3 + 1被解释为(2 * 3) + 1,而2 * i与 相同2 * (3 + 1)。这些意味着不同的东西,并适用于不同的数字。当你给3 + 1一个名字时,当你使用这个名字时,它不会把数字分解成3 + 1只乘以 3。

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

注意:如果你这样做了#define pstring char *thenconst pstring 与 相同const char *,因为宏 ( #defines) 仅被视为文本替换。


推荐阅读