C语言中如何用指针交换两个数的大小

如何用传址的方式交换两个数的大小

首先先看第一个程序,用函数的调用来解决看似正确实则运行出来的结果是错误的

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int JH(int x, int y);
int main()
{
	int a, b;
	printf("请输入两个数:\n");
	scanf("%d%d", &a,&b);
	JH(a, b);
	printf("交换后两数的值分别为%d和%d", a,b);
	system("pause");
	return 0;
}
int JH(int x, int y)
{
	int temp;
	if (x != y)
	{
		temp = x;
		x = y;
		y= temp;
	}
	return 0;
}

首先我们先来分析一下这个程序,他只该表了x和y的值并未改变a和b的值,由于单向的值传递方式,形参的改变不能使实参发生改变,所哟最后输出的结果仍然和输入的值一样并未改变a和b的值。因此 行参只是实参的一个拷贝,形参改变了只是拷贝改变了,实参仍为原来的值,但是你如果用传址调用的话,把形参定义为指针变量,实参调用地址的话,单你把指针所指的变量改变,实参所对应的值也改变了。所以下面我们来修改这个程序

<pre name="code" class="csharp">#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int JH(int *x, int *y);
int main()
{
	int a,b,*p1,*p2;
	printf("请输入两个数:\n");
	scanf("%d%d", &a,&b);
	p1 = &a;
	p2 = &b;
	JH(p1,p2);
	printf("交换后两数的值分别为%d和%d", *p1,*p2);
	system("pause");
	return 0;
}
int JH(int *x, int *y)
{
	int p;
	if (*x != *y)
	{
		p = *x;
		*x = *y;
		*y = p;
	}

	return 0;
}

 

改进后的程序运行出来是没有问题的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值