c++ - 为什么是const指针而不是指向const的指针?

标签 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的指针?

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

最佳答案

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 pstringconst (char *) 相同,即指向 char 的常量指针。 pstring 本身就是一个完整的类型,当您执行 const pstring 时,它不会拆分 char * 以使 char 部分常量。

注意:如果您执行了#define pstring char *,那么const pstring const char *,因为宏 (#define) 仅被视为文本替换。

关于c++ - 为什么是const指针而不是指向const的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55366779/

相关文章:

c - 在结构中递增指向数组的指针

sql - 数据长度 vs 数据精度

c++ - boost::chrono::time_point<> 和 boost::chrono::steady_clock::time_point 之间的区别

haskell - 在 Haskell 中将 Int 定义为类型类的实例时出现问题

c++ - 使用引用比使用指针的优势是否证明偶尔出现 "null-references"是合理的?

c++ - new_node->compare_exchange_weak 中的下一次更新

c++ - C++中的析构函数直接调用

C语言: How to use memset to reset dynamic 2d array?

c++ - 如何使用 C/C++ 套接字从 HTTP 读取二进制文件

c++ - Caesar Cipher C++(使用字符指针和移位作为参数)