1. 回顾:函数的值传递
因为函数的调用过程中,实参到形参是值传递(值的拷贝),因此,改变形参,是无法影响到实参的:
#include <stdio.h>
void FakeSwap(int nArg1, int nArg2)
{
int nTemp = nArg1;
nArg1 = nArg2;
nArg2 = nTemp;
}
int main(int argc, char* argv[])
{
int nValue1 = 100;
int nValue2 = 200;
printf("交换前:%d, %d\r\n", nValue1, nValue2);
FakeSwap(nValue1, nValue2);
printf("交换后:%d, %d\r\n", nValue1, nValue2);
return 0;
}
运行结果:
以上,形参的改变,无法影响函数调用的实参,因此无法完成nValue1, nValue2的交换。
2. 使用指针交换两个变量的值
#include <stdio.h>
void PointerSwap(int* pArg1, int* pArg2)
{
int nTemp = *pArg1;
*pArg1 = *pArg2; //内存地址所对应的内存区域的数据交换
*pArg2 = nTemp;
}
int main(int argc, char* argv[])
{
int nValue1 = 100;
int nValue2 = 200;
printf("交换前:%d, %d\r\n", nValue1, nValue2);
PointerSwap(&nValue1, &nValue2);
printf("交换后:%d, %d\r\n", nValue1, nValue2);
return 0;
}
运行结果:
使用指针,函数调用过程中依然是值传递,但是,通过指针的解引用操作,根据传入的地址,直接修改了地址处的值,达到了交换的目的
。
实践中,也常通过这种方法,无需返回值,仅使用指针从函数中带出信息,克服C语言中函数只有一个返回值的特点实现读取多个值的作用
。
3. 学习视频地址:通过指针实现函数交换两个变量的值