📌  相关文章
📜  指向常量的指针 - C++ (1)

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

指向常量的指针 - C++

在 C++ 中,常量是指不能被修改的值。在某些情况下,我们需要定义一个指针,它指向的是一个常量,也就是说,指针所指向的值是不能被修改的。这就是指向常量的指针。

定义指向常量的指针

要定义一个指向常量的指针,需要在指针的类型前面加上 const 关键字。例如,如果我们想要定义一个指向整数常量的指针,可以这样定义:

const int* ptr;

这个定义中,* 表示指针,const 表示这是一个指向常量的指针,int 表示指针所指向的类型是整数。

注意,const 关键字可以放在 * 的任何一侧,如下所示:

const int* ptr1;
int const* ptr2;

这两个定义是等价的。

使用指向常量的指针

指向常量的指针可以指向常量或非常量对象,但它只能用于读取指针所指向的值。如果试图修改指针所指向的值,编译器会报错。

例如,我们可以定义一个整数常量和两个指向整数的指针(一个是指向常量的指针,一个是普通指针),并尝试修改它们所指向的值:

const int num = 10;
const int* ptr1 = #
int* ptr2 = #  // 编译错误:无法将‘const int*’转换为‘int*’

*ptr1 = 20;  // 编译错误:从‘const int*’到‘int*’的转换被禁止
*ptr2 = 20;  // 可以运行,但是会导致未定义的行为

我们可以看到,在第一行中,我们定义了一个整数常量 num,并将一个指向常量的指针 ptr1 指向它。由于 ptr1 是指向常量的指针,因此不能用于修改 num 的值。

在第二行中,我们试图将一个普通指针 ptr2 指向 num,但是编译器报错,因为在 C++ 中,不能将一个指向常量的指针隐式转换为一个普通指针。

在第三行中,我们尝试使用指向常量的指针 ptr1 修改 num 的值,但是编译器报错,因为 ptr1 是指向常量的指针,不能用于修改所指向的值。

最后,在第四行中,我们使用普通指针 ptr2 修改 num 的值,可以正常运行,但是由于 num 是一个常量,修改它的值会导致未定义的行为,因此这样做不是一个好的实践。

总结
  • 指向常量的指针可以指向常量或非常量对象,但只能用于读取指针所指向的值,不能用于修改。
  • 要定义一个指向常量的指针,需要在指针的类型前面加上 const 关键字。
  • const 关键字可以放在 * 的任何一侧。
  • 使用指向常量的指针时需要谨慎,防止导致未定义的行为。