为什么是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 * i
与2 * (3 + 1)
相同。这些意味着不同的事情,并计算出不同的数字。当你给 3 + 1
一个名字时,当你使用这个名字时,它不会将数字分解回 3 + 1
以便只乘以 3.
const char *
与const pstring
不同的原因很相似。 const char *
被解释为 (const char) *
即指向常量 char 的指针。但是 const pstring
与 const (char *)
相同,即指向 char 的常量指针。 pstring
本身就是一个完整的类型,当您执行 const pstring
时,它不会拆分 char *
以使 char
部分成为常量。
注意:如果你做了 #define pstring char *
那么 const pstring
将 与 const char *
相同,因为宏 (#define
s) 仅被视为文本替换。
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 * i
与2 * (3 + 1)
相同。这些意味着不同的事情,并计算出不同的数字。当你给 3 + 1
一个名字时,当你使用这个名字时,它不会将数字分解回 3 + 1
以便只乘以 3.
const char *
与const pstring
不同的原因很相似。 const char *
被解释为 (const char) *
即指向常量 char 的指针。但是 const pstring
与 const (char *)
相同,即指向 char 的常量指针。 pstring
本身就是一个完整的类型,当您执行 const pstring
时,它不会拆分 char *
以使 char
部分成为常量。
注意:如果你做了 #define pstring char *
那么 const pstring
将 与 const char *
相同,因为宏 (#define
s) 仅被视为文本替换。