不使用函数实现
数据交换值是一个非常简单的语句,我们在 不使用函数 的情况下可以这样:
int a = 5;int b = 6;int num = 0;
//定义两个数字a,b和一个中间变量实现数据交换
num = a;
a = b;
b = num;
printf("%d %d\n", a, b);//依次输出a,b
我们发现初始化值的a,b在依次输出时数据发生了转换。
直接赋值写函数
让我们用同样的思路去利用函数来完成这个练习:
#include<stdio.h>
int Exchange1(int a,int b){
int num = 0;
num = a;
a = b;
b = num;
}
int main(){
int x = 5; int y = 6;
Exchange1(x, y);
printf("%d %d\n", x, y);
return 0;
}
?为什么输出的x,y没有交换呢?
为什么相同的逻辑下函数却没与发生数据交换的改变呢?
这是因为在函数运行的情况下,我仅仅改变了形式参数a,b,却没有改变实际参数x,y的值。
让我们看看在内存中发生了什么:
如图所示,在函数运行中我只改变了a,b的值,而没有改变x,y的值。
利用指针变量写函数
这时我们就要利用指针变量来完成我们的任务。
代码如下:
#include<stdio.h>
int Exchange2(int *a, int *b){
int num = 0;
num = *a;//*a,*b为解引用
*a =* b;
*b = num;
}
int main(){
int x = 5; int y = 6;
Exchange2(&x, &y);
printf("%d %d\n", x, y);
return 0;
}
注意:*a,*b是解引用的意思,,"解"就是把该地址对应的东西解开,解出来,得到值。
这时就成功完成我们的交换数据,在内存中的具体为:
0x100,0x200是自定义起名的地址,16进制。
这就是利用函数的指针变量来交换数据的方法。