之间有什么区别
const int d=1;
const int *p = &d;
和
const int d=1;
int const *p = &d;
我可以用前者和后者做什么?
答案 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
的值,但更改指向