C语言指针变量实现 交换swap

C语言指针变量实现 交换

不使用指针变量:

正确写法

t=a;//正确的
a=b;
b=t;

错误写法


#include<stdio.h>
int main()
{
	void swap(int x,int y);
	int *point_1,*point_2;
	int a,b;
	scanf("%d%d",&a,&b);
	swap(a,b);
	printf("%d %d",a,b);
	return 0;
}
void swap(int x,int y)//错误的
{
	int temp;
	temp=x;
	x=y;
	y=temp;
}

不能企图通过改变指针形参的值而使指针实参的值改变,函数结束时,形参x,y已经释放,而main函数中的a与b 并未互换,不能采取把要改变值的变量作为参数的办法,可以使用指针变量作为函数参数,函数执行时将指针变量所指向的变量值发生变化

使用指针变量:

两个数由大到小输出


#include<stdio.h>
int main()
{
	void swap(int *p1,int *p2);
	int *point_1,*point_2;
	int *temp;
	int a,b;
	scanf("%d%d",&a,&b);
	point_1=&a;
	point_2=&b;
	if(a<b) 
	{
		temp=point_1; //使指向a与b的指针变量(地址)交换,a与b的值并未改变
		point_1=point_2;
		point_2=temp;
	}
	printf("%d %d\n",a,b);
	printf("%d %d",*point_1,*point_2); //取地址交换后指针变量的内容

	return 0;
}

输入a 与 b 的值分别为 3 和 6
在这里插入图片描述
定义swap函数实现

#include<stdio.h>
int main()
{
	void swap(int *p1,int *p2);
	int *point_1,*point_2; //定义两个指针变量
	int a,b;
	scanf("%d%d",&a,&b);
	point_1=&a; //使指针变量point_1指向a
	point_2=&b; //使指针变量point_2指向b
	if(a<b) swap(point_1,point_2);
	printf("%d %d",*point_1,*point_2);

	return 0;
}
void swap(int *p1,int *p2) //定义swap函数
{
	int temp; //定义一个整型变量temp作为临时辅助变量实现a,b的交换
	temp=*p1; //相当于 temp=a;
	*p1=*p2; //相当于  a=b;
	*p2=temp; //相当于 b=temp;  即指针变量中内容的交换
}

错误写法:

void swap(int *p1,int *p2)
{
	int *temp;
	temp=p1;
	p1=p2;
	p2=temp;
}
在这里插入代码片

C语言中实参变量与形参变量之间的数据传递是单向的“值传递”方式,不能通过执行调用函数来改变实参指针变量的值,只可以改变实参指针变量所指向变量的值,不能企图通过改变指针形参的值而使指针实参的值改变

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值