在C语言中,能否获取数组元素的地址通过下标获取已过尾数,如下代码
int array[5]; int *array_begin = &array[0]; int *array_end = &array[5];
具体来说,&array[5] 符合 C 标准吗?
是的,代码符合 C 标准。
根据C99草案标准:
§6.5.2.1,第 2 段:
后缀表达式后跟方括号 [] 中的表达式是数组元素的下标指定对象。
§6.5.3.2,段落3:
如果 [& 运算符] 的操作数是 [] 运算符的结果,则 & 运算符和 [] 隐含的一元 * 都不会被求值,结果为就像删除 & 运算符并将 [] 运算符更改为运算符一样。
§6.5.6,段落8:
如果表达式 P 指向数组对象的最后一个元素,则表达式 (P) 1 指向数组对象的最后一个元素。
基于这些摘录:
因此,表达式 &array[5] 等价于 *(array 5),它指向超过数组末尾 1数组的最后一个元素。根据标准,这是合法的,只要指针没有取消引用。
以上是通过下标获取 C 数组末尾的地址合法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!