找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

C語言選擇排序中交換數(shù)據(jù)的不同方式出現(xiàn)的不同結(jié)果 求分析

查看數(shù): 1592 | 評論數(shù): 2 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
huh
發(fā)布時間: 2020-4-5 13:50

正文摘要:

//選擇排序,升序 void main() {     int i,min,j,t;     int a[5]={5,3,4,21,2};     for(i=0;i<4;i++)     {         min=i;//默認此時 ...

回復(fù)

ID:272485 發(fā)表于 2020-4-5 17:15
這要看編譯器是如何在棧中組織臨時變量的,大部分編譯器會按照你定義的變量順序從棧底到棧頂安排存儲空間,所以按照你的定義順序,你的變量在棧中順序為:a[0],a[1],a[2],a[3],a[4],t,j,min,i,在t未刪除的情況下,初始值是0xCCCCCCCC,即十進制有符號數(shù)-858993460,你第一次搜索時,i=0,a[0]=5,min=a[i]=5,接下來a[i]=a[min]執(zhí)行的是a[0]=a[5],a[5]不在數(shù)組中,正是t所在的位置,所以就出現(xiàn)1結(jié)果,刪除t后,溢出到j(luò)的位置,j此時的值是5,所以就出現(xiàn)2的結(jié)果,3是正確代碼得到的正確結(jié)果。
vs2017使用的編譯器不是按照你定義的順序組織變量,一般會先組織構(gòu)造類型,再組織常規(guī)類型。  
ID:722908 發(fā)表于 2020-4-5 16:28
想要交換的話要有一個中間量啊,不然a[min]=min的時候min已經(jīng)是a[i]的指了,-858993460怎么出來的我也不清楚233

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表