前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C/C++里的const(1)

C/C++里的const(1)

作者头像
用户7043923
发布2020-03-11 15:49:42
2880
发布2020-03-11 15:49:42
举报
文章被收录于专栏:J博士的博客J博士的博客

首先来看这样一段程序:

代码语言:javascript
复制
 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     char *s = "hello world";
 5 
 6     cout << s << endl;
 7     s[0] = 'B';
 8     cout << s << endl;
 9     return 0;
10 }

在VS2013下编译运行的结果是:

什么原因呢?

计算机中的内存在用于编程时,被进行了分区(Segment),分为:“栈区”(Stack)、“堆区”(Heap)、全局区(静态区,Static )、文字常量区和代码区。

使用*s定义的字符串存储在文字常量区内,这一部分是默认为为const类型的,因此不能修改。

当把程序改成如下,就可以得到想要的效果了。

代码语言:javascript
复制
 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     //char *s = "hello world";
 5     char s[] = "hellow world";
 6     cout << s << endl;
 7     s[0] = 'B';
 8     cout << s << endl;
 9     while (1);
10     return 0;
11 }

运行结果:

通过打印一下两种方式的字符串首地址,跟容易发现问题所在。

修改后的程序:

代码语言:javascript
复制
 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     char *s1 = "hello world";
 5     char s2[] = "hellow world";
 6     cout << &s1 << endl;
 7     //s[0] = 'B';
 8     cout << &s2 << endl;
 9     cout << &main << endl;
10     while (1);
11     return 0;
12 }

运行结果:

可以发现由字符串定义的字符串被放到了很靠前的地址空间(栈区);而由指针定义的字符串与main函数地址很近。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-04-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档