找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

C语言选择排序中交换数据的不同方式出现的不同结果 求分析

查看数: 1614 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
huh
发布时间: 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;//默认此时 ...

回复

ID:272485 发表于 2020-4-5 17:15
这要看编译器是如何在栈中组织临时变量的,大部分编译器会按照你定义的变量顺序从栈底到栈顶安排存储空间,所以按照你的定义顺序,你的变量在栈中顺序为: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使用的编译器不是按照你定义的顺序组织变量,一般会先组织构造类型,再组织常规类型。  
ID:722908 发表于 2020-4-5 16:28
想要交换的话要有一个中间量啊,不然a[min]=min的时候min已经是a[i]的指了,-858993460怎么出来的我也不清楚233

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表