免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pmerofc
打印 上一主题 下一主题

[C] 请教一个基础问题——数组名减1是否可以 [复制链接]

论坛徽章:
0
151 [报告]
发表于 2009-12-18 20:06 |只看该作者
原帖由 pmerofc 于 2009-12-17 19:29 发表
刚好出现指针指向数组之前一个对象的情况
...

“数组之前一个对象”?你以为是“数组之前一个对象”,或你安排了“数组之前一个对象”,但是,编译器并不保证它正好位于数组前,因为C标准没定义这个。编译器甲可能将该数组和该对象正好安排在紧邻,编译器乙也可能将它哥俩安排个两地分居,甚至相距十万八千里。
C标准没规定,源码里相邻定义的两对象,在目的码里也是相邻的。

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

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

论坛徽章:
0
154 [报告]
发表于 2009-12-18 20:26 |只看该作者
原帖由 zx_wing 于 2009-12-17 20:47 发表


那段标准里的话不是说
int a[10]
int * p = a -1;
这个行为是无定义的,而是指你读写p中内容的行为,是无定义的。 ...


感觉这个说的挺有道理.

论坛徽章:
0
155 [报告]
发表于 2009-12-18 20:29 |只看该作者
原帖由 OwnWaterloo 于 2009-12-15 04:25 发表
既然你也读了标准, 也知道这是未定义行为, 为什么要去验证它是否真的会错呢???
既然标准说这是未定义行为, 你就无法证明它在所有平台上都有正确行为。
无论你能够通过实验证明它在1个平台、2个平台、n个 ...


感觉这个说的也挺有道理.

论坛徽章:
0
156 [报告]
发表于 2009-12-18 20:33 |只看该作者


lz 的这个提法在一些特定的应用场合还是有作用的.

比如:

  1.          char *p;
  2.          char *any;
  3.          char mcb[10];
  4.          int i;

  5.          p=new char[100];
  6.          any=p;
  7.          for(i=0;i++;i<4)
  8.          {
  9.              any--;
  10.              mcb[i]=*any;
  11.          }
复制代码

论坛徽章:
0
157 [报告]
发表于 2009-12-18 20:36 |只看该作者

回复 #156 system888net 的帖子

这时候减一操作就是有意义的了,因此从这个角度来说,LZ的探索是有意义的.
实际上是应用条件和场合决定了一个说法是对的还是错的,或者说是有意义的还是无意义的,因此都是相对的.



[ 本帖最后由 system888net 于 2009-12-18 20:38 编辑 ]

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

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

论坛徽章:
0
160 [报告]
发表于 2009-12-18 22:44 |只看该作者
原帖由 pmerofc 于 2009-12-18 21:28 发表


在下愚昧
没看懂您想说明的问题
能否再详细说明一下
谢谢


参考一个实际的例子:
http://bbs.chinaunix.net/viewthread.php?tid=1388714&page=1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP