免费注册 查看新帖 |

Chinaunix

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

[C] 有多少C程序员认为这是错误的写法 [复制链接]

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
21 [报告]
发表于 2012-05-11 21:49 |只看该作者
pmerofc 发表于 2012-05-11 21:36
回复 15# OwnWaterloo

我觉得构成一维数组的元素是float


我支持OwnWaterloo

我认为C++中,
int a[2][3];
则a[0]+1=a[1];
故没有所谓的越界问题。

就算是:
(&a[0][2])+1,也就是“越界”
将指向a[1][0];也是符合数组定义的,只要标准许可的都可以做吧,算是C/C++有别于其它语言的特点之一。

PS:以前看过你和其它人的讨论,你应该不是那种死板的人,但太书呆子气了。
言者之所以在意,得意而忘言。不要执着于一辞,死钻牛角尖,不然就成为为讨论而讨论,没有实际意义。

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

论坛徽章:
0
23 [报告]
发表于 2012-05-11 21:56 |只看该作者

  1. int (*arr)[4][5] = calloc (3*4*5 , sizeof(int)) ;
  2. a[1][2][3] = 4 ;
复制代码
个人觉得问题不大

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

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

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

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
27 [报告]
发表于 2012-05-11 22:08 |只看该作者
pmerofc 发表于 2012-05-11 21:53
回复 21# folklore


用手头的VS2010,
a[0]的确是int *类型的,
但事实上它应该是:        int (*)[2]类型的
也就是int (*pA)[2]=(int (*)[2])a[0];
所以,在C++中应当避免这种扯不清的写法,使用数组的时候用下标而不是地址加减

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

论坛徽章:
0
29 [报告]
发表于 2012-05-11 22:23 |只看该作者
回复 25# pmerofc


    ..原版的是这样:

  1. pascal : var arr : array [1..3 , 2..4 , 3..5] of integer ;
  2. c      : int (*arr)[3][3] = (void*)&((int(*)[3][3])(calloc (3*3*3 , sizeof(int))))[-1][-2][-3] ;
复制代码

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
30 [报告]
发表于 2012-05-11 22:27 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP