利用函数实现数据值交换(指针变量)

不使用函数实现

数据交换值是一个非常简单的语句,我们在 不使用函数 的情况下可以这样:

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进制。
这就是利用函数的指针变量来交换数据的方法。

猜你喜欢

转载自blog.csdn.net/zhaocx111222333/article/details/109312339
今日推荐