char *s = "0123"和 char s[] = "0123"的区别

rookiemaster · 2024-3-29 16:39:15 · 274 次点击
为什么前者不可以修改,后者可以修改,是因为存储区域的问题吗?
举报· 274 次点击
登录 注册 站外分享
21 条回复  
huang119412 小成 2024-3-29 16:52:39
因为 char s[] = "0123",是语法糖。"0123"是常量字符串,不能修改。但是使用字符数组编译器会把"0123"在栈上复制一份,并把首地址赋值给数组名。
tuwulin365 小成 2024-3-29 16:52:58
https://lmbtfy.cn/s/0tHcH1k-sa
tzxxxx 小成 2024-3-29 16:53:48
https://www.gnu.org/software/c-intro-and-ref/manual/html_node/String-Constants.html
throcean 小成 2024-3-29 16:54:40
前面在编译的时候就会生成字符串常量在静态常量区(好像是这个区,有点忘了),后者是栈上的一个字符数组
qq135449773 小成 2024-3-29 16:56:22
@tuwulin365 #2

你不想回答可以不回答,没必要在这里展示你作为 IT 工作者还使用百度这个搞笑的事实。
leonshaw 小成 2024-3-29 17:03:40
两个都可以修改,一个是指针,一个是数组。
liuidetmks 小成 2024-3-29 17:04:43
https://godbolt.org/z/T9d38EWTq

这个网站挺好,我也是在 v 站看到的
DiamondY 小成 2024-3-29 18:50:16
@tzxxxx #5 单片机会有这样处理方式,字符串直接存在闪存中,cpu 可以通过地址总线读取,但是不能直接进行写入操作
oIMOo 小成 2024-3-29 18:52:26
@liuidetmks #8 这个网站好哎 不过汇编都还给老师了哈哈哈
123下一页
返回顶部