函数调用过程中保存返回地址
保存堆栈框架
保存在sort函数中用到的寄存器的值
sort函数中为局部变量分配空间
编译器不同,对函数操作的情况会有差别,
代码的实现当然要依赖编译器和cpu的设计...
2007-10-09 19:18
2007-10-09 20:43
这个栈是由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个元素的.
2007-10-09 21:22
2007-10-09 22:52
#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;
}
}
}
}
2007-10-09 23:22
这个tc和 vc都应该可以了把
2007-10-09 23:23

2007-10-10 10:19
我有一个地方不明白``` oaoaoaaoao在sort函数声明了住函数的数组```
要是住函数是通过人为输入``而不是直接赋值``那么sort函数的数组又怎么定义呢``或者说又怎么半呢?

2007-10-10 11:01
2007-10-10 11:23

2007-10-10 11:27