首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向数组的第一个元素的指针是UB。这是什么时候第一次这样定义的?

指向数组的第一个元素的指针是UB。这是什么时候第一次这样定义的?
EN

Stack Overflow用户
提问于 2021-09-18 22:42:06
回答 1查看 83关注 0票数 0

减少指向数组第一个元素的指针是C17时未定义的行为。这个答案引用了C17的标准说法

C17 6.5.6/8 如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则计算值不会产生溢出;否则,行为将未定义。

这是最早定义的标准吗?这种操作是如何在早期的标准中定义的?以前是合法的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-18 22:49:59

最早的C标准C89在3.3.6加法算子中也有相同的规则

当将具有整数类型的表达式添加到指针或从指针中减去时,积分值首先乘以所指向对象的大小。结果具有指针操作数的类型。如果指针操作数指向数组对象的一个成员,并且数组对象足够大,则结果指向同一个数组对象的一个成员,与原始成员适当地偏移。因此,如果P指向数组对象的成员,则表达式P+1指向数组对象的下一个成员。除非指针操作数和结果都指向同一个数组对象的一个成员,或者指向数组对象的最后一个成员,否则行为是未定义的。除非指针操作数和结果都指向同一个数组对象的成员,或者指针操作数指向数组对象的最后一个成员,并且结果指向同一个数组对象的一个成员,否则如果结果被用作单值*运算符的操作数,则行为是未定义的。

我不相信形成数组的"-1“元素的指针是定义得很好的C。当然,在特定的实现中,它可能发生了工作,或者被记录下来这样做了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69238989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档