#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的交换。
#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. 学习视频地址:通过指针实现函数交换两个变量的值