免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
121 [报告]
发表于 2012-05-13 13:24 |只看该作者
walleeee 发表于 2012-05-12 20:06
回复 79# 三月廿七

确实,...

别人,也可以说我脑残嘛, 大家都随意一点

论坛徽章:
0
122 [报告]
发表于 2012-05-13 13:33 |只看该作者
sonicling 发表于 2012-05-13 12:48
    考虑对齐问题,那等式还真不一定成立,比如
struct T {char a; int b;};


对齐、不对齐,都是成立的。

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

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

论坛徽章:
0
125 [报告]
发表于 2012-05-13 14:06 |只看该作者
回复 112# pmerofc


不知道这个算不算说明了问题。

ps,
Array这个英文单词本身就包含,连续一个接一个一系列,的潜在意思。尽管直接称呼是数组

捕获.PNG (45.15 KB, 下载次数: 24)

捕获.PNG

捕获.PNG (15.13 KB, 下载次数: 23)

捕获.PNG

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

论坛徽章:
0
127 [报告]
发表于 2012-05-13 14:16 |只看该作者
回复 121# 三月廿七


没有。我觉得你是挺智慧,就是不太会韬光养晦,唉,所谓人无完人,这些不必苛求,写代码只是非常微不足道的一个事情,所有事情之一,还有更多远比这重要的事情。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
128 [报告]
发表于 2012-05-13 14:20 |只看该作者
回复 123# pmerofc

那个人的回复……
没出现的时候吧…… 又期待:这问题幻の上帝会怎么看?
出现了吧……  又头大了:我看不懂啊教练!!!
{:3_191:}


memory显然必须是连续的。
这条回复以及往上追溯的其他回复,讨论的是"某种类型的指针是否能够访问某块连续内存的所有元素"吧?
我觉得是可以的。

指针可能是拼接,编译器也可能在指针运算时只计算其中一部分。 这可以作为p[-1],p[N+1]会出错的例子,但我觉得不足作为"float a[N][M]; float* p = &a[0][0]; p在&a[0][0]到&a[0][M]之外"会出错的例子。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
129 [报告]
发表于 2012-05-13 14:25 |只看该作者
回复 123# pmerofc

除了越界,还有其他问题么?
纯属好奇问问…… 真要写代码的时候多维数组这东西(以及它的各种问题)我能躲就躲了……

论坛徽章:
0
130 [报告]
发表于 2012-05-13 14:27 |只看该作者
回复 126# pmerofc


对,看起来越界了

看你怎么说,如果站在用户的角度(写这个代码的人),显然这就该理解成一个越界,因为a[2][3]是一个2个a[3],它们是联系存放:

memstart ( a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]  ) memend

用户肯定是把a[0]当作一组,a[1]当作一组,每一组都是3个元素这样来理解。
所以越界了

但是,既然已经不是通过下标这种数组特有的方式来访问了,而是*a+3这样,那就根本无所谓数组了,根本就是一个指针便宜的操作。所以无所谓越界不越界。

以上就是我的意思。这个问题根本没什么好说的,只是既然用a[2][3]这种形式来分配空间,那视乎没有太大的理由要用*a+3这样的形式,如果要这样,你该a[6]或者malloc(6*xxx)这些
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP