hac*_*cks 1 c arrays pointers undefined-behavior
我在很多例子中看到它写道:
#define N 5
....
int a[N], *p;
....
for (p = &a[0]; p < &a[N]; p++);
Run Code Online (Sandbox Code Playgroud)
很明显,a[N]不存在,那么为什么编译器没有给出任何警告(如出界)或错误或者它是否调用UB?
&a[N]程序永远不会访问内存,所以没关系.C标准允许比较数组对象内部或之后的指针.
编辑以下讨论:
&a[N]并不会导致未定义的行为-这是完全等价a + N.从C标准,6.5.3.2地址和间接运营商,第3段:
一元运算
&符产生其操作数的地址...如果操作数是[]运算符的结果,则&运算符和*由其暗示的一元一元都不[]被计算,结果就好像&运算符被移除并且[]运算符被更改为+运营商.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |