社区
C语言
帖子详情
有谁能说说这两者的区别?
FFSB
2010-09-24 10:48:55
const char XX[] = {'r','i','o','\0'};
char *YY = "rio";
...全文
344
28
打赏
收藏
有谁能说说这两者的区别?
const char XX[] = {'r','i','o','\0'}; char *YY = "rio";
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
旭子
2010-09-25
打赏
举报
回复
一个经过了拷贝到栈区的操作 另一个没有
zyyjaf
2010-09-25
打赏
举报
回复
[Quote=引用 26 楼 adnim 的回复:]
如果是int *YY=10 呢?这个可以改变么?
[/Quote]
报错,把int 转 int*
adnim
2010-09-25
打赏
举报
回复
如果是int *YY=10 呢?这个可以改变么?
luoqi
2010-09-25
打赏
举报
回复
楼主来提这样的问题了,
这不是简单的区别,
同样一个东西,用在不同的地方,他的作用是不同的!
微笑明明
2010-09-25
打赏
举报
回复
这个很基础啊
queatin_man
2010-09-25
打赏
举报
回复
char *YY="test";是声明一个常量字符串,放到静态存储区的
we_sky2008
2010-09-25
打赏
举报
回复
[Quote=引用 21 楼 we_sky2008 的回复:]
如果两者都是定义为全局的:
语句const char XX[] = {'r', 'i', 'o', '\0'};
在编译时被分配空间并被用花括号里初始化值集初始化,
因被定义为const的,所以有可能编译器会是在只读的文字常量区为数组XX分配空间,
而语句char *YY = "rio";
在编译的时候先将字符串常量初始化在只读的文字常量区,并为指针变量YY分配空间并被初始化为指向字符串……
[/Quote]
刚才试了下,
const char XX[] = {'r','i','o','\0'};如果是定义为全局的数组
在VC中数组XX确实是被分配在了只读的文字常量区,如果修改数组的元素会引起运行时刻错误
如:
*(char *)XX = 'R';会引起运行时刻错误
we_sky2008
2010-09-25
打赏
举报
回复
如果两者都是定义为全局的:
语句const char XX[] = {'r', 'i', 'o', '\0'};
在编译时被分配空间并被用花括号里初始化值集初始化,
因被定义为const的,所以有可能编译器会是在只读的文字常量区为数组XX分配空间,
而语句char *YY = "rio";
在编译的时候先将字符串常量初始化在只读的文字常量区,并为指针变量YY分配空间并被初始化为指向字符串常量"rio"
而YY本身是在DATA段被分配空间的
如果两者都是被定义在函数栈上,则:
语句const char XX[] = {'r', 'i', 'o', '\0'};
数组XX被创建在栈上并在运行时被初始化,
而语句char *YY = "rio"; 在栈上为指针变量YY分配空间,仍将"rio"创建在只读的文字常量区,并将YY初始化为指向文字常量的字符串常量"rio"
tianya0609
2010-09-25
打赏
举报
回复
打酱油
赵4老师
2010-09-25
打赏
举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
悅兎
2010-09-24
打赏
举报
回复
存储区域不同,读写权限不同
heminrui
2010-09-24
打赏
举报
回复
后者是存储在静态存储区,然后把指向该字符串常量的指针赋给指针YY,因此不能通过YY来改变某一个字符。而前面的是存储在栈里面。
Diza1986
2010-09-24
打赏
举报
回复
xuexi~~~~
lovestefanie
2010-09-24
打赏
举报
回复
后者是静态区。不能修改
iambic
2010-09-24
打赏
举报
回复
你的const更应该放在第二行……
FFSB
2010-09-24
打赏
举报
回复
[Quote=引用 4 楼 pengzhixi 的回复:]
区别就是rio存放的是常量区,而XX里面的字符存放在栈区,这样他们的生命期就不一样了。"rio"生命期要长
[/Quote]
回炉去
doctor1190
2010-09-24
打赏
举报
回复
const char XX[] = {'r','i','o','\0'};
定义一个常量字符串存储在静态存储区
char *YY = "rio";
char *YY = "rio"; 相当于:const char *YY = "rio"; YY指向的是常量字符串存储在静态存储区
两个的数据都存储在静态存储区,只是一个是指针形式,一个是数组形式;
pengzhixi
2010-09-24
打赏
举报
回复
区别就是rio存放的是常量区,而XX里面的字符存放在栈区,这样他们的生命期就不一样了。"rio"生命期要长
liutengfeigo
2010-09-24
打赏
举报
回复
储存的位置不同。
justkk
2010-09-24
打赏
举报
回复
存储空间不同
XX虽然限定为const,但是也能通过其它方式强行修改
YY存储在只读区域
加载更多回复(7)
亲身经历从软通外包到华为OD,两者有什么
区别
?
亲身经历从软通外包到华为OD,两者有什么
区别
? 声明:本人所有言论仅限2021-04当前真实所在的部门情况。 序言 坐标南京,本人2014年毕业于211本科院校,16年底加入软通动力,20年初转入华为OD。到如今算是经历了...
面试官:
说
说
left join和left semi join 两者有什么
区别
?
说
说
left join和left semi join 有什么
区别
? 对于left join 张工在平时编写sql用得比较多,但对于left semi join张工很少用到,所以
说
不出个所以然来了。 面试官见张工回答不上来,由于张工应聘的岗位对编写sql...
说
说
Real DOM 和 Virtual DOM 的
区别
?优缺点?
二、
区别
两者的
区别
如下: 虚拟 DOM 不会进行排版与重绘操作,而真实 DOM 会频繁重排与重绘 虚拟 DOM 的总损耗是“虚拟 DOM 增删改+真实 DOM 差异增删改+排版与重绘”,真实 DOM 的总损耗是“真实 DOM 完全增删改+...
什么是抽象类?什么是接口?两者有什么
区别
?
重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,...
Eureka和zookeeper都可以提供服务注册与发现的功能,请
说
说
两个的
区别
Eureka和zookeeper都可以提供服务注册与发现的功能,请
说
说
两个的
区别
1)、Zookeeper保证了CP(C:一致性,P:分区容错性),Eureka保证了AP(A:高可用) (1)、当向注册...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章