为了账号安全,请及时绑定邮箱和手机立即绑定

C语言下标的问题

#include<stdio.h>
int main()
{
	int a[10];
	int i;
	for(i=0;i<=10;i++)
		printf("a[%d]..%p\n",i,&a[i]);
	for(i=0;i<=10;i++)
	{
		a[i]=i;
		printf("a[%d]..%d\n",i,a[i]);
	
	}

	return 0;
}

  还是可以 打印出a[10]。 下标不是从0-9吗???

正在回答

1 回答

如果数组下标越界了,那么它会自动接着那块内存往后写,这是C语言的一个不完善的bug,即使越界了也不会像java一样报数组越界异常,因为,不检查下标是否越界可以有效提高程序运行的效率除此之外,不检查下标是为了给程序员更大的空间,也为指针操作带来更多的方便

虽然你能正常打出了a[10],但最好不要这样做,规定说不允许数组下标越界,并不是因为界外没有存储空间,而是因为界外的内容是未知的。也就是说如果界外的空间暂时没有被利用,那么我们可以占用那块内存,但是如果之前界外的内存已经存放了东西,那么我们越界过去就会覆盖那块内存,导致错误的产生

2 回复 有任何疑惑可以回复我~
#1

Strangerrゝ 提问者

非常感谢!
2016-10-21 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926255    人
  • 解答问题       20798    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

C语言下标的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信