要求pt1指向a b的最大,以下不能得出求解

#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