指向const和const指针的指针

时间:2014-03-16 17:25:02

标签: c++ pointers const

之间有什么区别
const int d=1;
const int *p = &d;

const int d=1;
int const *p = &d;

我可以用前者和后者做什么?

3 个答案:

答案 0 :(得分:4)

没有区别,它们完全相同。

语言的语法只允许某些结构具有一定的自由度,类型的CV限定是这些情况之一。还有其他示例(例如foo typedef int;之类的声明。)

答案 1 :(得分:0)

const int *p;

上面的声明声明指针p指向常量int。换句话说,您无法更改参赛作品的价值,但您可以更改p本身。

int* const p;

上面的声明声明了一个指向p的常量指针int。换句话说,您可以更改参赛作品的值,但不能更改p。此外,

const int d = 1;
int * const p = &d;

不合法。取d的地址会产生const int*,并且不允许从const int*转换为int*(如果是,您可能会无意中更改常量对象的值)。< / p>

您可以使用const_cast

明确进行转换
const int d = 1;
int * const p = const_cast<int*>(&d);

但是将d的值更改为p仍然是非法的(未定义的行为)。

答案 2 :(得分:0)

const int *p;

p是指向常量整数的指针。您可以更改p中存储的值(因此它指向其他位置)但您无法更改p指向的值。

int* const p;

p是一个指向非常数整数的常量指针。您无法更改p的值,但更改指向

的整数