C语言数组赋值的问题

比如我赋值一个int a[4]={1,2,3,4};系统将1赋值给了a[0],2赋值给了a[1],3赋值给了a[2],4赋值给了a[3]。我一开始以为还有一个a[4]是不存在的,但是这个a[4]却给我带来了很大的麻烦。

问:刚刚我说过,我认为a[4]在内存中是不存在的,但是如果我调用它,系统却没有显示它不存在,为什么呢?更奇怪的是,它调用出来的值竟然是一个我从来没有定义过的不规则的值?
以上的两个问题,希望有高手来解答,非常感谢!

第1个回答  推荐于2016-11-29
数组的下界是一个在写代码的时候需要注意的问题,和普通数学不同的是,数组的下标是从0开始的,给初学者带来一定困扰。
其实按照上述例子和在开发中的实际,a[5],a[6]也是可以访问的,只是在a[0]的基础上不停的向后增加4个字节后,将后面存储空间中的内容按照int的格式取出,至于里面存放的是什么内容则是比较难以预测的,这个叫做数组越界。
c语言的编译器在实现时,进行的检查机制其实不多,更多的是要求程序员在规则之内做一些事情,而不是将所有的问题交给编译器去处理,使用数组不应越界是一个约定俗成的东西。
初学者很容易在这一点上犯错误,也由于c语言比较接近底层,所以自身的检查机制较少,所以以后多加注意即可。追问

大神能加一下qq吗,我还有一个问题想问你

追答

342250204

本回答被提问者采纳
第2个回答  2015-03-03
您好!.a[4]是一个垃圾值!他是一个不知道从那个内存单元随便取的一个随机的值!因为系统还有内存,所以不会提示出错。但是变异的时候应该有Warning!追问

伪随机是吗(好像随机过一次就不会变了)

相似回答