博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针和数组
阅读量:6859 次
发布时间:2019-06-26

本文共 1463 字,大约阅读时间需要 4 分钟。

hot3.png

比较一下char *s="hi,db";    s[0]='H';和char s[10]="hi,db"s[0]='H'这两个代码片段的区别
使用指针时报错:void main(){        char *s="hi,db";        s[0]='H';}反汇编结果:080483b4 
: 80483b4:       55                      push   %ebp 80483b5:       89 e5                   mov    %esp,%ebp 80483b7:       83 ec 10                sub    $0x10,%esp//char *s="hi,db" 80483ba:       c7 45 fc a0 84 04 08    movl   $0x80484a0,-0x4(%ebp)//s[0]="H",可以看到当我们试图将0x48(ascii码就是'H')写入一个地址为80484a0的内存中时,就会出错//因为这个内存快是存放常量字符串"hi,db",而常量字符串是放在.rodata段中的,也就是只读内存,所以不能将'H'写道//只读内存中 80483c1:       8b 45 fc                mov    -0x4(%ebp),%eax 80483c4:       c6 00 48                movb   $0x48,(%eax)//函数返回 80483c7:       c9                      leave 80483c8:       c3                      ret
使用数组却没有报错:void main(){        char s[10]="hi,db";        s[0]='H';}反汇编结果:080483b4 
: 80483b4:       55                      push   %ebp 80483b5:       89 e5                   mov    %esp,%ebp 80483b7:       83 ec 10                sub    $0x10,%esp//char s[10]="hi,db" 80483ba:       c7 45 f6 68 69 2c 64    movl   $0x642c6968,-0xa(%ebp) 80483c1:       c7 45 fa 62 00 00 00    movl   $0x62,-0x6(%ebp) 80483c8:       66 c7 45 fe 00 00       movw   $0x0,-0x2(%ebp)//s[0]="H"   将'H'写到栈中的内存没什么问题 80483ce:       c6 45 f6 48             movb   $0x48,-0xa(%ebp) 80483d2:       c9                      leave 80483d3:       c3                      ret

转载于:https://my.oschina.net/u/209614/blog/337232

你可能感兴趣的文章
三星三季移动DRAM市场份额创新高,达64.5%
查看>>
智能楼宇中的安防监控系统
查看>>
中科联想身份认证云服务联合实验室在北京揭牌
查看>>
Winform 通用分页控件实战篇(提供源码下载)
查看>>
云计算对数据中心行业未来发展的影响
查看>>
大数据时代 将会发生哪些变化?
查看>>
如何构建一个高效的数据科学部门
查看>>
XSS现代WAF规则探测及绕过技术
查看>>
HPE升级Integrity服务器采用最新安腾引擎
查看>>
何以从IT时代到DT时代?
查看>>
ARM CEO:物联网市场爆发的1000亿枚芯片将采ARM设计
查看>>
呼叫发生器软件
查看>>
Oracle数据库体系结构解析
查看>>
高性能云存储将不再是一个梦
查看>>
Oracle RAC Database 11.1.0.6监听故障案例
查看>>
强密码策略的最佳实践
查看>>
企业移动应用开发常见问题
查看>>
如何充分利用云计算? 掌握这十大方法或许可以
查看>>
Gartner报告:大数据将在中国大行其道
查看>>
管理阶层是如何看待测试?
查看>>