经典指针程序_互换两个数字

#include<stdio.h>
void swap_1(int a,int b)   //形参(局部变量,只能在本函数中使用) //error
{
	int tmp;
	tmp=a;
	a=b;
	b=tmp;
}

void swap_2(int *p,int *q)//error
{
	int *tmp;
	tmp=p;
	p=q;
	q=tmp;
}
void swap_3(int *p,int *q)  
{
	int tmp;
	tmp=*p;
	*p=*q;
	*q=tmp;
}


int main()
{
	int a=10;
	int b=20;            //实参
	//swap_1(a,b);          //形参ab不同于实参ab,该程序只改变了形参a、b的值,跟主函数a、b没有关系
	//swap_2(&a,&b);
	swap_3(&a,&b);
	printf("%d %d",a,b);   

	return 0;
}

(1)swap_1错误原因:形参ab不同于实参ab,该程序只改变了形参a、b的值,不改变实参ab(主函数a、b没有关系)
(2)swap_2错误原因:静态变量的地址是不变的,因此不能改变ab的地址,
只改变了形参p、q的值,形参的改变不影响ab的值,因为p指向a,q指向b(p=&a p=a),因此要互换p、*q的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值