这要看编译器是如何在栈中组织临时变量的,大部分编译器会按照你定义的变量顺序从栈底到栈顶安排存储空间,所以按照你的定义顺序,你的变量在栈中顺序为:a[0],a[1],a[2],a[3],a[4],t,j,min,i,在t未删除的情况下,初始值是0xCCCCCCCC,即十进制有符号数-858993460,你第一次搜索时,i=0,a[0]=5,min=a[i]=5,接下来a[i]=a[min]执行的是a[0]=a[5],a[5]不在数组中,正是t所在的位置,所以就出现1结果,删除t后,溢出到j的位置,j此时的值是5,所以就出现2的结果,3是正确代码得到的正确结果。
vs2017使用的编译器不是按照你定义的顺序组织变量,一般会先组织构造类型,再组织常规类型。 |