首页 > 后端开发 > C++ > `&array[5]` 是 C 语言中超出数组范围的有效指针吗?

`&array[5]` 是 C 语言中超出数组范围的有效指针吗?

Mary-Kate Olsen
发布: 2025-01-04 10:03:35
原创
362 人浏览过

Is `&array[5]` a Valid Pointer in C   Beyond Array Bounds?

数组下标可以超出数组范围吗?

下面的代码是否符合 C 标准:

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];
登录后复制

具体来说, &array[5] 在这种情况下的有效性是

C 标准

根据 C99 标准草案:

  • §6.5.2.1,第 2 段:“E1[E2] 与 (*((E1) (E2)))"
  • §6.5.3.2,第 3 段(强调):“如果操作数是 [] 运算符的结果,则既不是 & 运算符也不是一元 *对 [] 隐含的值进行求值,结果就好像删除了 & 运算符并将 [] 运算符更改为运算符。”
  • §6.5.6,第 8 段: “如果表达式 P 指向数组对象的最后一个元素后一位,则表达式 (P) 1 指向最后一个元素后一位数组对象的元素,如果表达式 Q 指向数组对象的最后一个元素后一位,则表达式 (Q) - 1 指向数组的最后一个元素对象。”

结论

这些规定表明:

  • 指针可以合法地将一个元素指向超过一个对象末尾的一个元素数组(不被取消引用)。
  • &array[5] 相当于 &*(array 5),这相当于 (array 5)。
  • (array 5) 指向数组末尾的一个。
  • 因为 &array[5] 不会导致取消引用,根据 C 标准是合法的。

以上是`&array[5]` 是 C 语言中超出数组范围的有效指针吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板