-
**常量指针: 常量指针是一个指向常量数据的指针,这意味着指针指向的数据不可以通过这个指针被修改。然而,指针本身的值(即存储的地址)是可以更改的;它可以指向另一个常量数据或非常量数据的地址。
在C/C++中,常量指针的声明如下:
const int *ptr; // 或者 int const *ptr;
上述两种声明方式都表示
ptr
是一个指向int
类型常量的指针。你不能通过ptr
来改变所指向的值,但可以改变ptr
的值使其指向另一个int
类型的地址。 -
**指针常量 : 指针常量是一个指针,它自身的值是常量,也就是说,一旦被初始化之后,指针的值(它所存储的地址)就不能再改变了。但是,如果指针指向的不是常量,那么你仍然可以通过这个指针修改指向的数据。
在C/C++中,指针常量的声明如下:
int *const ptr = &someVariable;
这里
ptr
必须在声明时初始化,并且以后不能再指向其他任何地址。但是,ptr
所指向的int
类型的数据可以通过ptr
来修改。
因此,核心区别在于:
- 常量指针主要限制通过这个指针改变所指向的数据,但允许改变指针指向的地址。
- 指针常量主要限制改变指针所存储的地址,但允许通过这个指针改变所指向的数据(除非它同时也是一个常量指针,下文将说明)。
还有一种情况是两者结合使用,创建一个指向常量数据的固定指针(即指针的地址和它指向的数据都不能改变):
const int *const ptr = &someConstantVariable;
在这种声明中,ptr
是一个指针常量,同时指向一个整型常量,因此无法修改ptr
的值(地址),也不能通过ptr
来修改其指向的数据。