请问既然数组下标从0开始为什么会出现这样的情况呢

图片说明图片说明

a[32]也可以有

c语言不会检查数组是否越界
数组越界可能会侵犯到别的变量的存储,也可能没事,如果恰好这个地方是两个变量之间空隙而没有用到的话。
打一个比方

不允许闯红灯
但是闯红灯未必一定发生车祸

你的for循环判断条件有问题,从下标0开始循环,但是会在下标是32的时候结束,C语言对数组是否越界不敏感,改为i<32即可