考虑以下情况 1:
const int n = 5;
int* p = &n;
这是无效的,因为&n
的类型是cont int*
而p
的类型是int *
(类型不匹配错误)。
现在,考虑第二种情况:
int k = 4;
int *const p = &k;
这个案例编译成功,没有任何错误。显然,p
的类型是 int * const
,而 &k
的类型是 int *
。在这种情况下,存在类型不匹配,但是它是有效的。
问题:为什么尽管存在类型不匹配,第二种情况仍然是有效的?
const
的指针(或引用)仅是不通过该指针/引用修改对象的承诺。这并不意味着对象是不可修改的。int *const
是一个常量指针(指针不能重新分配指向其他东西),而不是指向const
的指针。const int n = 5; int *const p = &n;
是合法的吗?不是的。const 的位置很重要。这是一个指向整数的常量指针。当然,你可以使用一个值来初始化一个常量。 - Swift - Friday Pie