不是释放了
程序执行到swap(i,j)时,会把当前的变量 推入到堆栈中(此时 i,j的值就进入堆栈了)
然后开始执行swap函数 而此时i,j的值也给传给了 x,y
swap函数执行完后,释放swap函数中用到的存储变量 这里是temp, x ,y
然后从堆栈中取回 i,j。因此 i,j 没有发生任何改变
程序可修改为
#include
void swap(int *x,int *y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void main()
{
int i,j;
i=4;j=6;
swap(&i,&j);
printf("i=%d,j=%d\n",i,j);
}
因为此时x与i 和y 与j 指向同一个存储区域,因此x,y变化后,i,j 也会发生改变
因为你swap函数只是做了值传递,并不会影响到原来的变量的。
所以要改成指针传递,或者引用传递,才可以实现效果。
你用的是传值调用 要用传址调用才可以
#include
void swap(int &x,int &y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
void main()
{
int i,j;
i=4;j=6;
swap(&i,&j);
printf("i=%d,j=%d\n",i,j);
}