当前位置: 代码迷 >> C语言 >> 怎么用一个没有参数的函数对数组排序
  详细解决方案

怎么用一个没有参数的函数对数组排序

热度:101   发布时间:2007-10-09 19:18:19.0
我简单的认为这个是为了检验栈以下的知识.

函数调用过程中保存返回地址
保存堆栈框架
保存在sort函数中用到的寄存器的值
sort函数中为局部变量分配空间

编译器不同,对函数操作的情况会有差别,
代码的实现当然要依赖编译器和cpu的设计...



----------------解决方案--------------------------------------------------------
好像很危险。。。具体是满递增,满递减,空递增,空递减,到底是哪一种栈要先确定吧
----------------解决方案--------------------------------------------------------


这个栈是由80x86cpu内部的ss 和esp或sp 寄存器支持的,

int数组array 是局部变量它的内存空间就是在栈上,

在sort函数中分配1个int型变量a,这个变量a和数组array都在这个cpu硬件支持的栈段上,

用a的地址加上 一定的偏移量就可以寻找到数组array中每个元素,


至于上边朋友说的vc6.0,它在生成代码的时候 变量a和数组array之间的偏移值不同于tc,

至于偏移是多少按照调用函数的过程自己计算,

在vc6.0中 把上次代码中的 p=p+4//修改成 p=p+22 ,我的机器上是能够访问到 数组a的第1个元素的.





----------------解决方案--------------------------------------------------------
看了楼上的各位后,我发现我还差很远,很远,很远,很远,很远…………
----------------解决方案--------------------------------------------------------
重新写了个..........

[CODE]

#include <stdio.h>
void sort(void);
int main()
{
int array[]={45,56,234,1,34,23,2,3};


sort();

{
int i; /*这儿的复合语句只是检验下数组array已经被sort()函数排序修改*/

for(i=0;i<8;i++)
printf("%d ",array[i]);
/*tc下请加getch()*/;
}


return 0;
}

void sort (void)
{
int index;

int *p=&index;

int b[]={45,56,234,1,34,23,2,3};


while(*p!=b[0]||p==b)
p++;


do{
index=0;
while(b[index]==p[index])
{
index++;
if(index==8)
break;
}
++p;
}while(index!=8);

--p;

{
int i,j,mid;
for(i=0;i<7;i++)
for(j=i+1;j<8;j++)
{
if(p[i]>p[j])
{
mid=p[i];
p[i]=p[j];
p[j]=mid;
}
}
}


}

[/CODE]
----------------解决方案--------------------------------------------------------

这个tc和 vc都应该可以了把


----------------解决方案--------------------------------------------------------
楼上的估计可以,这个办法倒是挺不错的,不需要弄明白那些复杂的知识就可以做到。
不过如果恰好index的地址和数组第一个元素的地址之间的差距不是sizeof(int)的整数倍,这样就不行了吧。
----------------解决方案--------------------------------------------------------

我有一个地方不明白``` oaoaoaaoao在sort函数声明了住函数的数组```

要是住函数是通过人为输入``而不是直接赋值``那么sort函数的数组又怎么定义呢``或者说又怎么半呢?






----------------解决方案--------------------------------------------------------

很想学习一下,不过我觉得这样题目没有意义,本来带参数是很容易实现的嘛.


----------------解决方案--------------------------------------------------------
这里有个前提:这个是一个题目,不允许修改主函数,所以需要用这么复杂的办法,实际编程的话,根本没人这么无聊。

所以如果可以假设数组通过人为输入,那就可以假设把数组设为全局变量了。如果非要做一个通用的解法,估计不写汇编是不行的,而且代码量也不少
----------------解决方案--------------------------------------------------------
  相关解决方案