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;
}
上边这段代码中,凡是注释掉的语句,都是编译报错的,意味着不能修改指针或其指向的变量的值!
![]() |
![]() |
结合上边的例子,可以得出以下结论:
const T* ptr 不可修改 ptr 指向的变量的值,但可以修改 ptr 的值,即可以将 ptr 指向另一个变量。但是无论 ptr 指向哪个变量,它都不能修改那个变量的值。
T* const ptr 可修改 ptr 指向的变量的值,但不可修改 ptr 的值,即 ptr 始终只能指向一个变量。
const T* const ptr 既不能修改 ptr 的值,也不能修改 ptr 指向的变量的值。