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

 

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

 

 

原文链接: https://www.cnblogs.com/dejavu/archive/2012/07/30/2614490.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    <C/C++> const表示了什么? (一)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/57344

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午8:13
下一篇 2023年2月9日 上午8:13

相关推荐