📜  常量指针,指向常量的指针和指向常量的常量指针之间的区别(1)

📅  最后修改于: 2023-12-03 15:25:31.479000             🧑  作者: Mango

常量指针,指向常量的指针和指向常量的常量指针之间的区别

在 C++ 中,常量指针、指向常量的指针和指向常量的常量指针是常用的几种指针类型。它们可用于限定指针的使用范围和保护被指向对象的值。本文将介绍它们之间的区别。

常量指针

常量指针是指一个指针所指向的地址不可变。也就是说,通过该指针不能修改它所指向的值,但是可以通过其他指针修改该值,如下所示:

int a = 10;
const int *p = &a;
*p = 20; // 错误,常量指针不能修改其指向的值
int *q = (int*) p; // 正确,将常量指针转换为非常量指针
*q = 20; // 正确,通过其他指针可以修改该值
指向常量的指针

指向常量的指针是指该指针所指向的值不可变。也就是说,通过该指针不能修改它所指向的值,但是可以通过其他指针修改该指针指向的地址,如下所示:

const int a = 10;
int *p = &a; // 错误,指向常量的指针不能指向一个非常量的变量
const int *q = &a;
*q = 20; // 错误,指向常量的指针不能修改其指向的值
int *r = (int*) q; // 正确,可以将指向常量的指针转换为非常量指针
*r = 20; // 正确,通过其他指针可以修改该常量的值
指向常量的常量指针

指向常量的常量指针是指该指针所指向的地址和值都不可变。也就是说,无法通过该指针改变其指向的地址和值,如下所示:

const int a = 10;
const int *const p = &a;
*p = 20; // 错误,指向常量的常量指针不能修改其指向的值
int * q = (int*) p; // 错误,指向常量的常量指针不能转化为非常量指针
总结

在 C++ 中,常量指针、指向常量的指针和指向常量的常量指针都有其独特的应用场景。它们可以用于限定指针的使用范围、保护被指向对象的值,有助于提高程序的安全性和可靠性。因此,在编写程序时,应根据需要合理选择指针类型。