c++ - 为什么它是一个 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 的指针?
任何人都可以清楚地解释,因为这本书似乎并没有澄清太多。
解决方案
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 pstring
与const (char *)
ie 指向 char 的常量指针相同。pstring
本身就是一个完整的类型,当你这样做时,const pstring
它不会char *
为了使char
部分 const 分裂。
注意:如果你这样做了#define pstring char *
thenconst pstring
将与 相同const char *
,因为宏 ( #define
s) 仅被视为文本替换。
推荐阅读
- cookies - IE 11 不发送带有 CORS 获取请求的 cookie
- r - 从 R 中的方差分析表中提取 p 值
- python - def- 胜过 lambda 函数吗?
- flutter - 如何在 Flutter 中更改布局
- docker - 将 docker 容器部署到 Heroku 时出错
- shell - sed - 如何在特定行上打印正则表达式匹配
- python - 如何将多个列表写入csv文件python3
- javascript - 使用函数通过键名删除对象属性
- ruby-on-rails - 下拉箭头在带有 Webpacker 的 Rails 6 中的引导菜单项上不起作用
- node.js - 用 Electron 打开一个 Express 应用程序(Nodejs)