前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指向字符串的指针赋值就出错?

指向字符串的指针赋值就出错?

作者头像
用户9736681
发布2022-05-11 08:21:05
5230
发布2022-05-11 08:21:05
举报
文章被收录于专栏:嵌入式随笔

现有一个指向字符串的指针,

代码语言:javascript
复制
char *test ="123123123";

如果执行下面这句话就会出错

代码语言:javascript
复制
*test=“321321”;

这是因为 test 这个指针指向的是123123123这个储存于常量区的字符串。这个区域的数据是不可改写的,所以运行*test=“321321”;这句话会出错。

数据存在于哪里通常可以用4个区来表达,也就是常说的内存四区。

通常说的内存四区指的就是上图中的堆区、栈区、全局区和代码区这四个部分,全局区又可以分为全局变量区和常量区。

栈区包括局部变量、函数的入参,返回值等。堆区是由程序员自行分配的内存。全局区用于存放全局变量、静态变量和常量,里面还有一个常量区,字符串常量和其他常量存放在此。该区域是在程序结束后由操作系统释放。const定义的全局变量存放在常量区(这个注意一下)。代码区存函数体的二进制代码。

为什么要划分这几个区呢,这是因为把不同的数据放到不同的区里,就赋予了这些变量或常量不同的生命周期和不同的释放方式,这样我们在编程中就可以根据需求灵活运用。

通过以上可以看出,上图中红色框内的是不可以更改的,开头那个字符串是存储在常量区的,是不可以更改的。所以开头的那个程序运行就会出错。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式随笔 微信公众号,前往查看

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

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

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