论C语言中的数组下标越界

在C语言中一般是不会检查数组的下标范围的,例如:

#include <stdio.h>

int main() {

	int i;
	int a[3];

	a[0] = 1;
	a[1] = 2;
	a[2] = 3;
	a[3] = 4;

	for (i = 0; i <= 3; i++)
	{
		printf("%d\n",  a[i]);
	}
	return 1;
}

上面的代码实际上对a[3]赋值时超出了定义时数组的长度3的范围,但是编译运行并没有报错,结果也很正确。

但是,如果我们稍作修改如下:

#include <stdio.h>

int main() {

	int i;
	int a[3];

	a[0] = 1;
	a[1] = 2;
	a[2] = 3;
	a[3] = 4;

	for (i = 0; i <= 3; i++)
	{
		a[i] = 0;
		printf("%d\n",  a[i]);
	}
	return 1;
}

运行后可以发现,仅仅在循环里增加了一句
a[i] = 0;

整个程序进入了死循环。

具体原因参见:http://eagletff.blog.163.com/blog/static/116350928201077113024458/

看来在编写c程序时要格外注意手动判断数组边界的问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值