在处理指针和const时,我看到有三种方法来声明它们:
1)
int nValue = 5;
int *const pnPtr = &nValue;
Run Code Online (Sandbox Code Playgroud)
2)
int nValue = 5;
const int *pnPtr = &nValue;
Run Code Online (Sandbox Code Playgroud)
3)
const int 5;
const int *const pnPtr = &nValue;
Run Code Online (Sandbox Code Playgroud)
示例1被称为"Const指向非const的指针".地址不能更改,但值可能会更改.所以我们可以做类似下面的事情,因为例1中的nValue是一个非const int:
int nValue = 5;
int const *pnPtr = &nValue;
*pnPtr = 6;
Run Code Online (Sandbox Code Playgroud)
但是我们不能在示例1中执行以下操作:
int nValue = 5;
int nValue2 = 6;
int const *pnPtr = &nValue;
pnPtr = &nValue2;
Run Code Online (Sandbox Code Playgroud)
示例2被称为"指向const的指针".这意味着地址可以更改,但值不能.我们可以做到以下几点:
int nValue = 5;
int nValue2 = 6;
const int *pnPtr = &nValue;
pnPtr = &nValue2;
Run Code Online (Sandbox Code Playgroud)
但是我们在示例2中不能执行以下操作:
int nValue = 5;
int nValue2 = 6;
const int *pnPtr = &nValue;
*pnPtr = nValue2;
Run Code Online (Sandbox Code Playgroud)
示例3是"const指向const的指针".这意味着地址或值都不能改变:
const int nValue;
const int *const pnPtr = &nValue;
Run Code Online (Sandbox Code Playgroud)
我的问题与第二个例子有关.当nValue不是const时,为什么第二个示例称为"指向const的指针".这是一个常规的int声明.另外,在第二个例子中,如果我们为另一个地址分配另一个地址具有不同的值时,我们不能仅仅依赖该地址,因此返回不同的值?这不会打败整个目的吗?
在const第二个例子适用于int,即你有一个非const指针const int.由于C和C++中的类型是从右向左读取的,因此最简单的方法是将const总是从右到右.它也是唯一可以始终如一地放置的地方:
int i(0);
int * p0(&i); // non-const pointer to non-const int
int const* p1(&i); // non-const pointer to const int
int * const p2(&i); // const pointer to non-const int
int const* const p3(&i); // const pointer to const int
Run Code Online (Sandbox Code Playgroud)
也就是说,你可以将const指针(p0和p1可以改变,但p2并p3不能),以及对实体的指针指向(*p0并且*p2可以改变,但*p1并*p3不能更改).对于第二行和第四行,你可以交换int和,const但我建议反对这样做.
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |