一个关于数组的问题,c语言的。

一开始定义的数组是有长度的,运行正常。
图片说明

但定义数组时没有长度,运行就会出错,虽然输出结果都一样。这是为什么?
图片说明

int a[]={1,1};定义了一维数组a,a的长度为2,只有两个元素,然后下面你又要从0-19遍历这个数组,当然会出错,下标越界。

第一次你定义的是一个长度为20的数组,第二次你这样写定义并初始化了一个长度为2的数组。所以第二次你的出错是因为遍历数组时数组越界造成的。

之所以两次值是一样是因为,你在定义的时候系统为你分配内存,两次分配的数组在内存中的起始地址是一样的 而这块内存中又没被别的程序修改过所以两次打印出来的值是一样的。你重启一下电脑或者过一段时间再重新运行程序值也许就不一样了。

学习C语言建议你多学习一下有关内存的知识,内存在使用之前要申请,使用时只能使用被申请过的内存,想第二个程序,你只申请了两个字节的内存,却访问两个字节后的内存所以会出错