C语言中数组下标为“-1”的情况(array[-1])

今天看代码的时候无意中看到了一个检测数组越界的代码段:

 

	if (size > 0) {
		if (str < end)
			*str = '\0';
		else
			end[-1] = '\0';


其中end是定义的内存空间的结束位置,如果访问越界了,就在结束前一个位置添加一个字符串结束符。

 

可以参考:http://zhidao.baidu.com/link?url=R_QV0U1WZPUfcLiFppLb2zC7CSP_CVzEwk8TbUQpGi6z9V_iJGpHZJizDjI5lvntdPvCrUOw7tSqaaZXaQctUa

问:我在代码中发现一处代码会出现&a[-1]的情况,a是一个数组,得到的结果有时是0,有时是一个正数,谁能解释一下下标为-1的时候得到的是什么值呢,谢谢

答:数组下标为-1的地址对于数组来说是越界访问了,但是这个地址是有意义的这个地址就是所申请的数组存储空间的首地址的向前偏移一个单位(也就是偏移一个当前数组类型所对应的字节数)所对应的地址。这个地址由于没有跟着数组空间一起初始化,所以其中的数据是不一定的,如果是正在被系统或者其他APP使用中的地址空间,那么可以被访问,其中的数据的意义取决于被系统或者其他APP所写入的数据,但是访问后,有可能会引起系统或者其他APP异常。如果是没有被使用的地址,那么就是一个野地址,那么其中的数据是随机的,无意义的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值