数组越界问题

数组是常用的存储结构,适用范围广,但在使用时经常会出现诸多问题,而在这些问题里最麻烦的问题便是数组越界问题,所以今天我们来看看 1.数组的存储方式;2.数组越界问题的定义;3.数组越界问题为什么最麻烦;4.我们应该怎么规避预防越界问题;

  1. 数组的存储问题:

[1] 局部变量:定义在函数体内部的变量,内存区域在栈里。
[2]栈:栈是一种特殊的存储方式,遵循先进后出原则,就像一个缸一 样,下端称为栈底,存放大地址;上端称为栈顶,存放小地址。
[3]变量存储规则:先定义的地址大,放在栈底。在给数组分配空间时是一次性给一大块,数组里的地址大小为a[0]<a[1],因为每次都有个i++,所以地址在增大,前面的放在栈顶,最后的放在下面(地址大)。
e.g:

int main()
{
int i;//先定义,放在栈底
int arr[10];//元素地址逐渐增加

在这里插入图片描述

  1. 数组越界的定义:
    你给数组只定义了十个长度,从a[0]~a[9],但你想给a[10]赋值,计算机找不到这个空间,若有变量在a[9]下面,则给a[10]的值便会覆盖掉i。这便称为越界问题。
for(i=0;i<=10;i++)//数组中并没有a[10],所以a[10]=0,不存在的
{
arr[i]=0;         //i在a[9]下面,故让i=0了,所以i<10,i++,会陷入无限循环中
printf("%d",i);
}

在这里插入图片描述
3. 数组问题为什么麻烦呢?
其一,出现这种问题程序会出现死循环,程序员根本无从下手,因为它没有报错,2012编译器则会出现崩溃,还好一点。
其二,项目多人合作完成,若上一个的代码中有越界问题,会严重影响下一段代码。

  1. 怎么规避预防越界问题?
    其实2012编译器已经给出了办法,那就是在数组和其他变量中间放几个炸弹,若越界则程序崩溃。这样就可以阻止它无限循环和改变位于数组下面的变量的值。
    在这里插入图片描述
    一定要谨记数组不能越界,不然会有大麻烦的。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值