#include "stdio.h"
int swap(int *p1, int *p2)
{
int *p;
p = p1; p1 = p2; p2 = p;
return 0;
}
int main()
{
int a, b; int *pt1, *pt2;
scanf_s("%d,%d", &a, &b);
pt1 = &a;
pt2 = &b;
if (a < b)
swap(pt1, pt2);
printf("%d,%d \n",*pt1, *pt2);
return 0;
}
是需要使用指针引用。
#include "stdio.h"
int swap(int*& p1, int*& p2)
{
int* p;
p = p1; p1 = p2; p2 = p;
return 0;
}
int main()
{
int a, b; int* pt1, * pt2;
scanf_s("%d,%d", &a, &b);
pt1 = &a;
pt2 = &b;
if (a < b)
swap(pt1, pt2);
printf("%d,%d \n", *pt1, *pt2);
return 0;
}
需要用指针引用。指针在形参中不会被改变。
#in: 2,3
#out:3,2
是这样的,在c++中,如果函数的形参是指针。(int *a,int *b)
然后你的实参是 (&a,&b);那么此时,a,b的值是会交换的。
但如果你传递的是指针,很抱歉, 形参指针变量只在函数内部交换。而实参指针变量是不改变的。
如果要交换,需要使用指针引用。代码已经给出。
知识点只要记,当形参是指针,指针(如果传递地址)在函数中地址肯定会被改变,如果传递指针(在函数中是以形参的形式调用的)不改变原始值。
可以自行尝试将函数形参 改成 int,int*,int&,int*& 查看函数调用情况。
int swap(int *p1, int *p2)
改为
int swap(int &p1, int &p2)
传值和传址的差别,可以用引用。代码修改ru如下即可(如有帮助,请采纳一下,谢谢):
void swap(int &a,int &b)
{
int t = a;
a = b;
b = t;
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
看到你在问答里面提了一个问题 ,我有对应的课程专栏。希望能帮到你。
本人简介:https://blog.csdn.net/it_xiangqiang/article/details/115873169
C和C++完整教程: https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程: https://blog.csdn.net/it_xiangqiang/category_10768339.html
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y