<C/C++> const表示了什么? (一)
那天,我看到:
1 const int* p = new int(10);
第1秒我很淡定啊,第2秒我就开始慌了。。。
心说,new出来的地址应该是块堆内存啊,const常量应该保存在内存静态区啊,那指针p指向的那块内存到底是在静态区还是堆里?
3、const 有什么用途?(请至少说明两种)(5分)
(1)可以定义 const 常量
(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
-- 《高质量C++/C编程指南》
其实想想很简单,const int* p是一个常量指针,即通过该指针不能修改其目标,可并没说这个指针所指向的目标就非得是常量。
1 int n = 100; // n不是常量 2 const int* p1 = &n; // p1指向n 3 int* p2 = &n; // p2指向n 4 n = 200; // ok,n不是常量,可以修改 5 *p1 = 300; // error,p1是常量指针,其目标不可修改 6 *p2 = 400; // ok,p2不是常量指针,其目标可修改
所以,const int* p = new int(10)表示p指向的内容不可(通过p来)修改,而不是定义了个常量。指向的int内存仍在堆中。
总结,指针的类型决定了指针的行为,至于指针所指向的目标,该怎么样还怎么样,跟这个指针木有关系。