【发布时间】:2013-11-14 01:34:46
【问题描述】:
在处理指针和 const 时,我看到有三种声明它们的方法:
1)
int nValue = 5;
int *const pnPtr = &nValue;
2)
int nValue = 5;
const int *pnPtr = &nValue;
3)
const int 5;
const int *const pnPtr = &nValue;
示例 1 称为“指向非 const 的常量指针”。地址不能改变,但值可以改变。因此我们可以执行以下操作,因为示例 1 中的 nValue 是一个非常量 int:
int nValue = 5;
int const *pnPtr = &nValue;
*pnPtr = 6;
但我们不能在示例 1 中执行以下操作:
int nValue = 5;
int nValue2 = 6;
int const *pnPtr = &nValue;
pnPtr = &nValue2;
示例 2 被称为“指向 const 的指针”。这意味着地址可以更改,但值不能更改。我们可以做到以下几点:
int nValue = 5;
int nValue2 = 6;
const int *pnPtr = &nValue;
pnPtr = &nValue2;
但我们不能在示例 2 中执行以下操作:
int nValue = 5;
int nValue2 = 6;
const int *pnPtr = &nValue;
*pnPtr = nValue2;
示例 3 是一个“指向 const 的常量指针”。这意味着地址或值都不能改变:
const int nValue;
const int *const pnPtr = &nValue;
我的问题与第二个例子有关。当 nValue 不是 const 时,为什么第二个示例称为“指向 const 的指针”。这是一个常规的 int 声明。另外,在第二个例子中,如果我们给它分配另一个地址,那个地址有不同的值,我们不能只尊重那个地址,因此返回不同的值吗?这不会破坏整个目的吗?
【问题讨论】:
-
有 4 种方式来声明指针,参见 Dietmar Kuhl 的回答。