C++ 指向常量的指针和指向某物的常量指针

C++ 指向常量的指针和指向某物的常量指针,c++,pointers,constants,C++,Pointers,Constants,两者的区别是什么 const int d=1; const int *p = &d; 及 我能用前者和后者做什么?没有区别,它们完全相同 语言的语法只允许某些结构有一定的自由度,类型的CV限定就是其中之一。还有其他示例(例如,声明如foo typedef int;)。没有区别,它们完全相同 语言的语法只允许某些结构有一定的自由度,类型的CV限定就是其中之一。还有其他示例(例如声明,如foo typedef int;)。const int*p 上面的声明声明了一个指向常量int的指针p。

两者的区别是什么

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


我能用前者和后者做什么?

没有区别,它们完全相同


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

没有区别,它们完全相同


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

const int*p

上面的声明声明了一个指向常量
int
的指针
p
。换句话说,您不能更改refereand的值,但可以更改
p
本身

int*const p

上面的声明声明了一个指向
int
的常量指针
p
。换句话说,您可以更改refereand的值,但不能更改
p
。而且

const int d = 1;
int * const p = &d;
这是不合法的。获取
d
的地址将产生
const int*
,并且不允许从
const int*
转换为
int*
(如果常量对象的值为空,您可能会无意中更改它的值)

您可以使用
const\u cast
显式进行转换:

const int d = 1;
int * const p = const_cast<int*>(&d);
const int d=1;
int*const p=const_cast(&d);

但通过
p
const int*p更改
d
的值仍然是非法的(未定义的行为)

const int *p;
上面的声明声明了一个指向常量
int
的指针
p
。换句话说,您不能更改refereand的值,但可以更改
p
本身

int*const p

上面的声明声明了一个指向
int
的常量指针
p
。换句话说,您可以更改refereand的值,但不能更改
p
。而且

const int d = 1;
int * const p = &d;
这是不合法的。获取
d
的地址将产生
const int*
,并且不允许从
const int*
转换为
int*
(如果常量对象的值为空,您可能会无意中更改它的值)

您可以使用
const\u cast
显式进行转换:

const int d = 1;
int * const p = const_cast<int*>(&d);
const int d=1;
int*const p=const_cast(&d);
但是通过
p
更改
d
的值仍然是非法的(未定义的行为)

const int *p;
p
是指向常量整数的指针。您可以更改存储在
p
中的值(因此它指向其他地方),但不能更改
p
指向的值

int* const p;
p
是指向非常量整数的常量指针。不能更改
p
的值,但要更改其指向的整数

p
是指向常量整数的指针。您可以更改存储在
p
中的值(因此它指向其他地方),但不能更改
p
指向的值

int* const p;

p
是指向非常量整数的常量指针。您不能更改
p
的值,但可以更改它指向的整数。请注意
int*const p
不同。请注意
int*const p
不同。