数组越界了但是为什么可以运行,没有报错呢?

#include <iostream>
using namespace std;
int main()
{
    int a[10];
    int i,*p=a;
    for(i=0;i<10;i++)
        cin>>*(p+i);
    cout<<endl;
    for(p=a;p<(a+10);p++)
        cout<<*p<<" ";
    cout<<*(p+11)<<*(p+10)<<*(p+12)<<*(p+13)<<a[18]<<endl;
    return 0;
}

数组越界好比闯红灯,不是每次都会被撞死,但是能不能活下来全赖人品。C语言不会对越界做检查,是否出错,全看你有没有写入到某个内存地址,这个地址恰好存放重要的数据。

数组越界的问题,之前就有很多人提问了,网上搜索一堆。
https://ask.csdn.net/questions/781653

定义数组时计算机给数组分配存储区域,数组名相当于指向数组首元素地址的指针变量。数组越界相当于指针指向给数组分配的区域外面去了。可能返回一个数值但肯定不是你希望的数值。
本来该在自己的地界上,越界跑到别人的地界上了