似曾相识 不过是个Bug...

大狗的窝~

<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内存仍在堆中。

 

总结,指针的类型决定了指针的行为,至于指针所指向的目标,该怎么样还怎么样,跟这个指针木有关系。

 

 

posted on 2012-07-30 02:51  Mr.DejaVu  阅读(263)  评论(0编辑  收藏  举报

导航

for myself...