在看《C++ Primer 第五版》的时候,发现了这么一个自己没注意到的地方:
const int*和int* const中的const修饰的对象不同,const int*修饰值,不能改变指针所指的值;int* const修饰指针,不能改变指针的地址。举个例子:
#include <iostream> using namespace std; ///////////////////////////SubMain////////////////////////////////// int main(int argc, char *argv[]) { int n = 0; int* p1 = &n; const int* p2 = &n; // 底层const,可以改变指针地址,不能改变指针指向的值 int* const p3 = &n; // 顶层const,可以改变指针指向的值,不能改变指针地址 (*p1)++; cout << n << endl; // error C3892: “p2”: 不能给常量赋值 // (*p2)++; // cout << n << endl; (*p3)++; cout << n << endl; p1 = nullptr; p2 = nullptr; // error C3892: “p3”: 不能给常量赋值 // p3 = nullptr; system("pause"); return EXIT_SUCCESS; } ///////////////////////////End Sub////////////////////////////////// /************************************************************************/ /* 1 2 请按任意键继续. . . */ /************************************************************************/