↓阿里云服务器3年不到300元↓

Tomcat 架构解析 阿里云服务器3年不到300元 Redis设计与实现

一个例子弄明白 c++ const 指针

const 修饰指针变量时,可以有三种形式:

  • const T* ptr;
  • T* const ptr;
  • const T* const ptr;

那么,这三种情况下,指针和其指向的内存到底哪个是不可修改的呢?

我们看以下代码:

#include <iostream>
using namespace std;

int main ()
{
  int i = 100;
  int j = 101;
  
  const int* p1 = &i;
  //*p1 = 111;
  p1 = &j;
  //*p1 = 222;
  cout << i << endl << j << endl;
  
  int* const p2 = &i;
  *p2 = 333;
  //p2 = &j;
  *p2 = 444;
  cout << i << endl << j << endl;
  
  const int* const p3 = &i;
  //*p3 = 555;
  //p3 = &j;
  //*p3 = 666;
  cout << j << endl << j << endl;
  
  
  return 0;
}

上边这段代码中,凡是注释掉的语句,都是编译报错的,意味着不能修改指针或其指向的变量的值!

C++ Primer Plus 第六版 Redis设计与实现

结合上边的例子,可以得出以下结论:

const T* ptr 不可修改 ptr 指向的变量的值,但可以修改 ptr 的值,即可以将 ptr 指向另一个变量。但是无论 ptr 指向哪个变量,它都不能修改那个变量的值。

T* const ptr 可修改 ptr 指向的变量的值,但不可修改 ptr 的值,即 ptr 始终只能指向一个变量。

const T* const ptr 既不能修改 ptr 的值,也不能修改 ptr 指向的变量的值。

C++ Primer Plus 第六版 阿里云服务器3年不到300元 流畅的 Python