這要看編譯器是如何在棧中組織臨時變量的,大部分編譯器會按照你定義的變量順序從棧底到棧頂安排存儲空間,所以按照你的定義順序,你的變量在棧中順序為: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使用的編譯器不是按照你定義的順序組織變量,一般會先組織構造類型,再組織常規類型。 |