C语言数组越界问题

越界问题:

数组越界获取到的值.

因为越界后,获取到的值是按照存储的先后,先存入的则地址高,后存入的则地址低.

数组越界后,如果你越界了那么会获取到地址高的值.

所以在C语言当中对数组越界方面,要十分注意.

如果越界问题,从上面所说,获取到的是高地址.

那么需要注意的一点,C语言对于for、while、switch等一些语句写进栈会有不一样的情况.

如果要真正的理解,需要看汇编以及一些存储问题.

那么用一个大概的想法.

以下是数组越界获取到的值的想法.

第一:获取到的就是一些垃圾值.(比如你注释的一些内容等),对于注释方面,需要注意!!

我会在下面让他体现一些关于注释和不注释的区别.

第二:获取到的就是一些你之前定义的变量.(比如你在数组定义之前定义了一些变量)

如图所示:

我先定义了数组,长度为10,再次定义了一个变量i = 100,然后打印i的值,因为在没有受到一些越界影响的问题的时候,我i = 100,然后进入循环当中,我在for循环里面定义了int i = 0,这个没想错的话应该是局部变量,不会影响到外部的i变量,然后i = 0,然后循环15次,分别把xint数组所有的值,进行遍历打印出来.

嗯,上面就是这些代码没有越界的情况下所进行的过程.

在说下面问题之前,我先说说大概的一些,这个只是给你一个大概的模型,并没有全部给概括进去.

因为存储方式是以栈的形式,那么按照我的想法,我先定义一个长度为10数组xint,然后再次定义i = 100,嗯,那么按照我的想法,既然我是以栈的形式存入,我按照先定义先定义先存入,这个想法好像在对一些语句是不对的,因为你可以尝试一下,我在数组前面定义变量i,按照我的编译器还是能获取到的.

嗯,先不说这个话题

如果按照我的想法走,因为先定义先存入,那么我数组如果越界了,那么获取到的就是高地址,数组是后存入的,那么我越界获取到的可能会有你之前定义的变量,也会有一些垃圾值,对于垃圾值,我上面大概说了一些,应该没问题.

然后,因为我数组长度为10,如果我数组xint[10]即为越界到了高地址,那么按照我之前的想法获取到的值,就是i = 100的值。

如图所示:

 

这个是我运行后的结果.

我在越界到xint[10]的时候获取到的值为100,你是不是以为我上面的想法一定是对的?

嘿嘿,这个是在没有注释for循环语句的时候,才是这样.

那么我注释for循环语句,那么我越界到10获取到的,还是不是100呢?

 

我在注释掉for循环后,我越界到11才获取到100.

 

这里面,我没有注释第二个for循环语句

如图所示:

数组越界到13才获取到100.

这里如果我对数组xint[13]进行赋值,那么会把之前的值给修改掉,会导致你的结果出错或者造成死循环.

运行结果图:

这就是导致你死循环甚至出现报错问题的原因.

至于我在for循环()里面对于定义int i = 0和i = 0的区别,在于局部和全局变量.

想不明白为什么有时候是越界到10或者11或者13.

如果我理解错了,求求求了,告诉我

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值