永发信息网

声明的数组在内存中一定是连续存放的吗

答案:2  悬赏:80  手机版
解决时间 2021-01-27 21:55
声明的数组在内存中一定是连续存放的吗
最佳答案
都是连续的
全部回答
你这种写法确实是可以修改的,因为你没有把a声明成const(注意,const其实不完全表示常量).按你的想法,应该声明成const char a[] = "hellow world"; 不过这样的确会出现你说的问题,a是可以修改的.原因的话其实算是c本身的缺陷了,反汇编一下就可以解释了. 源代码: #include int main(int argc, char *argv[]) { char * a = "abcd"; const char b[] = "efgh"; return 0; } 反汇编代码: .file "a.c" .def ___main; .scl 2; .type 32; .endef .section .rdata,"dr" lc0: .ascii "abcd\0" lc1: .ascii "efgh\0" .text .globl _main .def _main; .scl 2; .type 32; .endef _main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $20, %esp call ___main movl $lc0, -8(%ebp) movl lc1, %eax movl %eax, -13(%ebp) movzbl lc1+4, %eax movb %al, -9(%ebp) movl $0, %eax addl $20, %esp popl %ecx popl %ebp leal -4(%ecx), %esp ret 可以发现,c语言对两种情况是不同处理的.具体为什么不同我也不太清楚,推荐你看看c专家编程这本书,里面有详细的解释 楼下的可能没看明白我的意思, 如果代码是这样 #include int main(int argc, char *argv[]) { const char a[] = "hello world"; char *p = a; //a[2] = 'q'; p[1] = 'g'; printf("%s, %s\n", a, p); } 这段代码是可以运行的. 也就是说, 就算a里面存放的是字符串常量, p还是可以修改a的值, 然而这时直接修改a却是不行的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
2016我在桃源二职中高考了606分,旅游内,哪个
导尿的意思是什么啊?知道的请说下!
王思聪是不是有点太想出名 是不是太嘬?
请问南京大学传播学硕士的就业情况如何?
哈尔滨的冬天,是个冰天雪地的城市.( 修改病
请以什么,我的快乐之源为题写提纲
石家庄桥西区哪有卖罩火烧的?急!~
螃蟹和羊奶能一起吃吗
UG二次开发中如何直接借用Ug命令?
雅丽斯美容美发怎么去啊,我要去那办事
扢喇察的意思是什么啊?知道的请说下!
通过工行办理个人实物黄金业务收取的手续费是
万和燃气热水器开机嘀一声无显示
我小孩8岁了晚上还尿床怎么办?
【地铁和轻轨的区别】地铁和轻轨有什么区别和
推荐资讯
沈阳有抄股多屏电脑专营店吗?
意大利语动词时态运用
人的记忆储存在大脑皮层和海马区,他的组成物
渴望明天长一点
读地球公转示意图完成:(1)地球公转的周期
圣经中哪一部分最值得读?
北京的包装贷款公司可靠吗
开封到宿迁多少公里
【共青团是什么】共青团的基本职能是什么?
机票改签了是不是还是前一天的登机牌
如图为温带某景区导游图,在图示景区的主要自
弱脉的脉象特征是A.脉来如线,但应指明显B.浮
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?