指向数组边界外的内存地址

thu*_*ird 1 c c++

我想知道是否访问其边界之外的数组(以下代码示例中的第2行)是否会产生错误?

int a[20];
int* ptr = &a[20]; // line 2
int count=20;
do
{
  ptr--;
  printf("%d",*ptr);
}while(--count!=0);
Run Code Online (Sandbox Code Playgroud)

son*_*yao 5

根据C陷阱和陷阱:

但是如何引用一个不存在的元素呢?
幸运的是,我们不必将这个元素引用到它的地址,并且该地址确实存在于我们遇到的每个C实现中.此外,ANSI C明确允许这种用法:可以采用刚好超过数组末尾的不存在元素的地址,并将其用于赋值和比较目的.当然,引用该元素实际上是非法的!