#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
void change(int x,int y);
void exchange(int *q1,int *q2);
int a = 10;
int b = 20;
int *p1 = &a;
int *p2 = &b;
printf("a=%d,b=%d\n",a,b);
change(a,b);
printf("a=%d,b=%d\n",a,b);
exchange(p1,p2);
printf("a=%d,b=%d\n",a,b);
return 0;
}
//方法一:直接调用函数交换两数数值
void change(int x,int y)
{
int temp = x;
x = y;
y = temp;
}
//方法二:用指针交换两数数值
void exchange(int *q1,int *q2)
{
int temp = *q1;
*q1 = *q2;
*q2 = temp;
}
运行结果如下:

我通过两种不同的方法去实现交换a,b的值。但结果第一种方法无效而第二种方法有效。
原因在于方法一中a,b的值在函数change中赋给x,y以后,函数内交换的是x,y的值,而
非a,b的值。而在方法二中,首先,进入函数内的是a,b的地址;然后交换地址所对应的
值从而实现交换a,b的值。
同理可以实现三个数从大到小输出:
int main()
{
void exchange(int*q1,int*q2,int*q3);
int num1 = 0;
int num2 = 0;
int num3 = 0;
int *p1 = &num1;
int *p2 = &num2;
int *p3 = &num3;
print

本文探讨了使用指针在C/C++中交换两个数的正确方法,对比了两种不同策略的效果。重点解释了为何直接传递变量与传递地址进行交换的差异,并延伸介绍了如何利用指针实现三个数按从大到小的顺序输出。
最低0.47元/天 解锁文章
580

被折叠的 条评论
为什么被折叠?



