C语言为什么不执行数组下标的有效性检查

首先我们需要知道:除了优先级之外,下标引用和间接访问完全相同。
也就是:array[ 下标 ] 等价于 *( array + (下标) )

接下来我们举个例子:
int array[5];
int *p = array + 2;

p[-1]对等的表达式是array[1]。
p[3]对等的表达式是array[5]。
第一个p[-1]看上去是错误的,其实它是合法的。
第二个p[3]造成数组下标越界。

下标引用可以作用于任意的指针,而不仅仅是数组名。作用于指针的下标引用的有效性检查既依赖于该指针当时指向什么内容,又依赖于下标的值。

最后
2[array] 等价于 *(2 + array) 等价于 *(array + 2) 等价于 array[2]

总结:
1.困难且开销大。
2.C语言信任程序员

发布了5 篇原创文章 · 获赞 0 · 访问量 2546

猜你喜欢

转载自blog.csdn.net/yyy_hr/article/details/93781134