C语言的关于数组的一个小问题

问题如下
void main()
{
int a[10] = { 0 };//我定义了一个含有10个元素的数组,并且都付了初值0
a[10] = 2;/*这个式子是不是错误的?我理解的是a数组中并不存在a[10]这个元素怎么给赋值2?要知道最后一个元素应该是a[9],这样直接给a[10]赋值竟然没报错?为什么?这样是不是就等于默认了a数组元素个数已经给拓宽到了11个,并且给赋值了?*/

}

void main() { int a[10] = { 0 };
定义了一个含有10个元素的数组,并且都赋了初值0
a[10] = 2;/*这个式子确定是错误的!
a数组中并不存在a[10]。上面的赋值就是把值给赋到“邻居”家去了,有没有造成损失就看运气了。这种情况叫做“数组越界使用”,C编译系统对此种情况不作检查,全靠编程者自己注意避免。
打个比方,就好比自己规划了一片货场,用吊机把一批易碎物品吊放到这货场上,但是吊车司机有点马大哈,放到货场的边界线外面去了(别人家的地盘),运气好的,什么事也没有,运气不好时,压坏了别人家的物品,还把自己的东西也搞砸了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-20
int a[10];定义了一个整形数组,一共有10个元素,
a[0]~a[9],a[10]越界了,访问了a数组内存地址之后的地址空间,即访问了数组之外的地址,结果未知
相似回答