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

pointer to const and const pointer to something

本文关键字:指针 常量      更新时间:2023-10-16

之间有什么区别

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

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

我能对前者和后者做些什么?

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

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

const int *p;

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

int* const p;

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

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

不合法。取d的地址会得到const int*,并且不允许从const int*转换为int*(如果是的话,您可能会无意地更改常量对象的值(。

您可以使用const_cast:进行显式转换

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

但是改变CCD_ 15到CCD_。

const int *p;

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

int* const p;

p是指向非常量整数的常量指针。您不能更改p的值,但可以更改它指向的整数