type * const 与 const type * 是在C/C++编程中特别容易混淆的两个知识点,现在就以 int * const 和 const int * 为例来简略介绍一下这两者之间的区别。
1.int * const 讲解
int a = 20;
int * const b = &a;
b代表一个指向a变量存储空间的int *常量指针,由于b是一个常量指针,因此其指针值无法改变,亦即无法指向其他的存储空间,但其指向的存储空间的值可以通过 *b = newValue / a = newValue 改变。
示例代码如下:
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int a = 20; 8 int * const b = &a; 9 cout << *b << endl; 10 *b = 40; 11 cout << *b << endl; 12 int c = 60; 13 //b = &c; error 14 cout << *b << endl; 15 return 0; 16 }
2.const int * 讲解
int a = 20;
const int * b = &a;
b代表一个指向 const int 存储空间的指针,b所指向的存储空间的数值不可以通过 *b = newValue 改变,但可以通过 a = newValue改变,b 也可以指向其他存储空间。
示例代码如下:
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int a = 20; 8 const int * b = &a; 9 cout << *b << endl; // *b = 20 10 //*b = 20; error 11 a = 30; 12 cout << *b << endl; // *b = 30 13 14 const int d = 55; 15 //int *e = &d; error 16 const int * e = &d; 17 cout << *e << endl; // *e = 55; 18 //d = 20; error 19 //*e = 30; error 20 return 0; 21 }