C语言数组排序后出现未初始化值33,求原因解释
数组排序后出现未初始化值33的原因
你的代码问题出在数组越界访问,具体看内层循环的条件:
for(j=i+1; j<7; j++)
你定义的数组arr是int arr[6],C语言数组下标从0开始,合法下标范围是0到5。但j<7会让j取值到6,此时访问arr[6]已经超出了数组的内存边界。
数组存放在栈内存中,边界外的区域属于栈里的其他未初始化内存,里面的值是随机的(这里恰好是33)。当排序逻辑执行到交换arr[i]和arr[6]时,这个随机值就被交换到数组的合法位置,最终打印时就出现了这个未初始化的33。
修复方法:把内层循环的条件改为j<6,确保只遍历数组的合法元素:
for(j=i+1; j<6; j++)
内容的提问来源于stack exchange,提问作者Hamas
相关产品推荐
相关产品推荐

