返回

常量指针与指针常量:一文读懂

闲谈

在 C++ 中,指针是一种强大的数据类型,它可以存储其他变量的地址。常量指针和指针常量是 C++ 中两个密切相关的概念,它们可以帮助我们创建更健壮、更安全的代码。

让我们深入了解一下常量指针和指针常量的含义及其用法。

常量指针

常量指针是指向常量的指针。这意味着一旦初始化,就不能再改变指针所指向的值。常量指针使用 const 声明,如下所示:

const int* ptr;

在这种情况下,ptr 指向一个 int 型常量。这意味着一旦将 ptr 指向一个常量,就不能再改变它所指向的值。

指针常量

指针常量是指向不可变地址的指针。这意味着一旦初始化,指针本身就不能再被重新分配。指针常量使用 const 关键字声明,如下所示:

int* const ptr;

在这种情况下,ptr 是一个指向 int 型变量的指针,但它本身是不可变的。这意味着一旦将 ptr 指向一个变量,就不能再重新分配它以指向另一个变量。

常量指针与指针常量的区别

常量指针和指针常量的主要区别在于它们指向的内容的常量性。对于常量指针,指针本身是可变的,但它指向的值是常量的。对于指针常量,指针本身是不可变的,但它指向的值可以是可变的。

何时使用常量指针和指针常量

  • 常量指针: 当我们需要指向不会更改的值时,使用常量指针。例如,我们可以使用常量指针指向一个常量数组。
  • 指针常量: 当我们需要一个指向特定变量的指针时,使用指针常量。即使变量的值发生更改,指针也不会被重新分配。

示例

下面是一个示例,演示了如何使用常量指针和指针常量:

#include <iostream>

using namespace std;

int main() {
  // 常量指针
  const int num = 10;
  const int* ptr = &num;

  // 指针常量
  int* const ptr2 = new int(20);

  // 尝试修改常量指针所指向的值
  //*ptr = 20; // 错误:无法修改常量指针所指向的值

  // 尝试重新分配指针常量
  //ptr2 = new int(30); // 错误:无法重新分配指针常量

  cout << *ptr << endl;  // 输出:10
  cout << *ptr2 << endl; // 输出:20

  return 0;
}

在上面的示例中,ptr 是一个常量指针,它指向常量 num。ptr2 是一个指针常量,它指向变量 ptr2。我们尝试修改 ptr 所指向的值和重新分配 ptr2,但都会产生错误。

结论

常量指针和指针常量是 C++ 中有用的工具,它们可以帮助我们编写更健壮、更安全的代码。通过了解它们的含义和用法,我们可以充分利用这些概念来提高代码质量。