数组访问界限检查

  • c++访问数组时,无论以下标方式还是以指针方式访问,都不会对其作界限检查,即使访问超出数组的界限。
  • 如下代码,定义一个长度为7的数组,当访问数目超过7时,执行程序编译器不会报错。
int a[7] = { 0,1,2,3,4,5,6 };
int a7=1, a8=1;

int main()
{
    int i;

    cout << "数组各个元素的地址" << endl;
    for (i = 0; i < 9; i++)
    {
        cout << "a[" << i << "]的地址为" << (a + i) << endl;
    }
    cout << "a7的地址为" << &a7 << endl;
    cout << "a8的地址为" << &a8 << endl;
    cout << endl;

    cout << "以下标方式访问数组" << endl;
    for (i = 0; i < 9; i++)
    {
        cout << "a["<< i << "]=" << a[i] << " ";
    }
    cout << endl;
    cout << endl;

    cout << "以下标方式访问数组" << endl;
    for (i = 0; i < 9; i++)
    {
        cout << "a[" << i << "]=" << *(a+i) << " ";
    }
    cout << endl;
    cout << endl;

    cout << "未超限写数组之前a7和a8的数据" << endl;
    cout << "a7=" << a7 << endl;
    cout << "a8=" << a8 << endl;
    cout << endl;

    cout << "超限写数组...." << endl;
    for (i = 0; i < 9; i++)
    {
        a[i] = i;
    }
    cout << endl;

    cout << "超限写数组之后a7和a8的数据" << endl;
    cout << "a7=" << a7 << endl;
    cout << "a8=" << a8 << endl;
 }

执行结果如下:
数组访问超限
超限的a[7]和a[8]和定义的int类型a7、a8的变量地址相同,当超限访问到a[7]和a[8]时,读出来的数据即和a7、a8的初始化数据相同。当超限写数组的数据,超限写a[7]和a[8]的数据即改变了变量a7、a8的数据。

  • 总结: 1. c++编译器不会对数组的超限读写进行检查,超限访问数组的数据可能会得到意想不到的数据,而超限写数组的数据可能会改变其他变量的数据,从而程序可能不会按照预想的情况运行;2. 以下标访问数组本质上还是使用指针访问,数组名就是首地址,下标就是地址的偏移量(个人理解,错误请指出)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值