为什么输出结果是一样

img

这个swap函数是传值函数,对main函数中的变量的值不影响
在函数传参时,会发生一次数据拷贝,在main函数中调用swap(x,y)的时候,发生一次拷贝,让a=x,b=y, a和b是临时变量,系统会重新分配内存,也就是说:a和x的内存不一致,b和y的内存空间不一致,他们的关系只是a的值等于x的值,b的值等于y的值,所以,在swap中对a和b的操作对main函数中的x和y没有影响。
swap函数修改成如下方式:

void swap(int *a,int *b)
{
int t = *a;
*a = *b;
*b = t;
}

在main函数中调用,swap(&x,&y),这时候传入swap函数的就是x和w的地址,在swap中,对地址中的数据进行操作,就会对main函数中的变量产生影响。

这个函数本身的特性导致的,想要修改值用指针,传入函数的值并不会直接修改,而是在另外的一个内存中重新创建一个新的临时变量进行处理,函数调用结束就释放

因为交换后只是swap函数中的局部变量a,b完成了交换,结果并没没有传到x,y,所以结果是一样的,如果要x,y完成交换,那么可以如下使用引用,或者使用指针
void swap(int &a, int &b){
int t = a;
a = b;
b = t;
}


#include "stdafx.h"

void swap(int &a, int &b){
    int t = a;
    a = b;
    b = t;
}
int main()
{
    int x,y;
    x = 10;
    y = 20;
    printf("x=%d,y=%d\n",x,y);
    swap(x,y);
    printf("x=%d,y=%d\n",x,y);
    return 0;
}

运行结果为:

img

谢谢以上各位大佬们,我悟了