在学习c语言的过程中,可能我们很少见到int int *const p,const int *p和int const *p,但当我们在学习c++的过程中,就会遇到这些模糊不清的概概念,如果没搞清楚它们的区别,我们在使用过重中会很痛苦,但如果我们搞懂了它们之间的区别之后,用起来非常方便。
首先int const*p=const int *p;都表示*p的值不能改变,而p(即地址)是可以改变的;
void test001() { int a = 10; const int* re = &a; //指针*re不能改变 re的值可以改变 int const* re2 = &a; //*re = 30; //err *re指向内容不能改变 cout << "re=" << re << ",*re=" << *re << endl; cout << "re2=" << re2 << ",*re2=" << *re2 << endl; int c = 20; re = &c; re2 = &c; cout << "re=" << re << ",*re=" << *re << endl; cout << "re2=" << re2 << ",*re2=" << *re2 << endl; }
结果:
至于int *const p;
恰恰和上面的相反,即int *const p表示 p(地址)是常量,不可改变,但是*p的值可以改变
void test002() { int a = 10; int * const re = &a; //指针re不能变 但是*re指向的内容可以变 *re = 100; cout << "re=" << re << ",*re=" << *re << endl; int c = 20; //re = c; //err 指针地址不能变 *re = c; cout << "re=" << re << ",*re=" << *re << endl; }
结果: