常量(的)指针
const int * ptr = new int(10); // 1)常量指针 指针指向一个常量即指向的值不可改变
常量指针是这个指针指向了一个常量,即指针的的指向可以改变,但是指向的的值不可以改变
指针常量
int * const ptr2 = new int(20); // 2)指针常量 这个指针是一个常量即指向不可改变
指针常量是指这个指针是一个常量,即指针的指向(地址)不可改变,但是地址对应的值是可以改变的。
草图
代码示例
cout << "const ptr start" << endl;
const int * ptr = new int(10); // 1)常量指针 指针指向一个常量即指向的值不可改变
cout << "ptr1 address" << ptr << " point to " << *ptr << endl;
int temp = 30;
// *ptr = temp; // 改变指向的值 不可行 Read-only variable is not assignable
delete ptr;
ptr = &temp; // 改变指向可以
int * const ptr2 = new int(20); // 2)指针常量 这个指针是一个常量即指向不可改变
int& r = temp; // 3) 引用本质上也是一个指针常量 如下
// int * const s = &temp;
// r = *s;
*ptr2 = temp; // 改变指向的值 是可以的
// ptr2 = &temp; // 改变指向不可以 Cannot assign to variable 'ptr2' with const-qualified type 'int *const'
r = temp; //改变值可以
// &r = &temp; // 改变指向不行 Expression is not assignable
cout << "ptr2 address" << ptr2 << " point to " << *ptr2 << endl;
delete ptr2;