xVJ币圈网 - 区块链数字货币实时行情平台
c语言中形参与实参的关系是:形参是实参的值副本。无论参数的类型是什么,传递到子函数中的形参只是实参的值。所以,在改变形参变量自身的值时,是与实参无关的。换句话说,形参的改变不会影响到实参。xVJ币圈网 - 区块链数字货币实时行情平台
但,如果参数类型是指针类型,则可以通过对指针变量所指向的地址中的数据进行修改,达到改变实参地址中的数据目的。xVJ币圈网 - 区块链数字货币实时行情平台
因此,使用SWAP函数进行数据交换时,必须保证两点:xVJ币圈网 - 区块链数字货币实时行情平台
参数必须是指针类型,指向待交换的数据xVJ币圈网 - 区块链数字货币实时行情平台
交换时,必须交换地址中的数据,而不是交换地址本身。xVJ币圈网 - 区块链数字货币实时行情平台
参考代码:xVJ币圈网 - 区块链数字货币实时行情平台
//错误的交换代码1xVJ币圈网 - 区块链数字货币实时行情平台
voidswap1(inta,intb)//参数不是待交换数据的指针xVJ币圈网 - 区块链数字货币实时行情平台
{xVJ币圈网 - 区块链数字货币实时行情平台
intt=a;xVJ币圈网 - 区块链数字货币实时行情平台
a=b;xVJ币圈网 - 区块链数字货币实时行情平台
b=t;xVJ币圈网 - 区块链数字货币实时行情平台
}xVJ币圈网 - 区块链数字货币实时行情平台
//错误的交换代码2xVJ币圈网 - 区块链数字货币实时行情平台
voidswap2(int*a,int*b)xVJ币圈网 - 区块链数字货币实时行情平台
{xVJ币圈网 - 区块链数字货币实时行情平台
int*t=a;//交换形参变量本身xVJ币圈网 - 区块链数字货币实时行情平台
a=b;xVJ币圈网 - 区块链数字货币实时行情平台
b=t;xVJ币圈网 - 区块链数字货币实时行情平台
}xVJ币圈网 - 区块链数字货币实时行情平台
//正确的交换代码xVJ币圈网 - 区块链数字货币实时行情平台
voidswap(int*a,int*b)xVJ币圈网 - 区块链数字货币实时行情平台
{xVJ币圈网 - 区块链数字货币实时行情平台
intt=*a;//交换形参变量地址中的数据,指针变量不变xVJ币圈网 - 区块链数字货币实时行情平台
*a=*b;xVJ币圈网 - 区块链数字货币实时行情平台
*b=t;xVJ币圈网 - 区块链数字货币实时行情平台
}xVJ币圈网 - 区块链数字货币实时行情平台
楼主需要再深刻理解一下函数的参数和返回值~xVJ币圈网 - 区块链数字货币实时行情平台
首先一个函数的返回值必然只能是一个变量,您的swap函数中return(a,b)可能编译都不通过哦~xVJ币圈网 - 区块链数字货币实时行情平台
同时,函数的参数有传地址、传值、传引用三种形式,您这种情况建议使用传指针的方式,在swap中直接对a,b的值进行修改。代码如下:xVJ币圈网 - 区块链数字货币实时行情平台
void swap(int*a, int*b)xVJ币圈网 - 区块链数字货币实时行情平台
{xVJ币圈网 - 区块链数字货币实时行情平台
int t;xVJ币圈网 - 区块链数字货币实时行情平台
t=*a;xVJ币圈网 - 区块链数字货币实时行情平台
*a=*b;xVJ币圈网 - 区块链数字货币实时行情平台
*b= t;xVJ币圈网 - 区块链数字货币实时行情平台
}xVJ币圈网 - 区块链数字货币实时行情平台
在main中调用方法为 swap(&a,&b);xVJ币圈网 - 区块链数字货币实时行情平台