免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1885 | 回复: 6
打印 上一主题 下一主题

面试题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-06 05:08 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2012-03-06 08:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2012-03-06 08:43 |只看该作者
第19行s.p= p,也就是s.p 指向s.i
第21行改变了s.p[1],也就是改变了s.p也就是p本身,22行再想给通过s.p[0]给s.i赋值就会错误

论坛徽章:
0
4 [报告]
发表于 2012-03-06 09:09 |只看该作者
p[1] = 3;
s.p[1] = 1;
这两行越界访问了,s.p[1]已经修改了s.p自身,指向了非法地址,再访问s.p[0]自然出错。

论坛徽章:
0
5 [报告]
发表于 2012-03-06 11:30 |只看该作者
正解

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
6 [报告]
发表于 2012-03-06 11:40 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2012-03-06 11:47 |只看该作者
  1. struct S s;
  2.         int *p = &s.i;
  3.         p[0] = 4;
  4.         p[1] = 3;

  5.         s.p = p;

  6.         s.p[1] = 1;
  7.         s.p[0] = 2;  ////这一行死掉
复制代码
和下面的一样
  1. struct S s;
  2.         int *p = &s.i;
  3.         *(p) = 4;
  4.         *(p+1) = 3;

  5.         s.p = p;//s.p指向s.i

  6.        *(s.p+1) = 1;//把s.p中的内容改为1(s.p、s.i以及局部指针p的地址在程序运行时一直不变,但地址里的内容可以变),先前是3,
  7.         *(s.p+0)= 2;  ////这一行死掉,这里对地址1中的内容进行赋值,非法
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP