指针将三个数排大小swap函数在调用后为什么exchange函数指针值没调换 - 爱问答

(爱问答)

指针将三个数排大小swap函数在调用后为什么exchange函数指针值没调换

#include<stdio.h>

 

void swap(int *p1,int *p2)

{int tmp;

 tmp=*p1;

 *p1=*p2;

 *p2=tmp;

}

void exchange(int *pt1,int *pt2)

{if(*pt1<*pt2)

 {

 swap(pt1,pt2);

 }

 printf("%d",*pt1);

}

int main()

{int a;

int b;

int *p1;

int *p2;

a=10;

b=1;

p1=&a;

p2=&b;

exchange(p1,p2);

return 0;

 

}


两个问题归根结底都是参数传递的问题:对于你的交换函数swap(int a, int b)来说,如果你不使用指针,在函数内,操作的实际上是a和b的一份副本,从上层来说,可以这样理解,在调用swap之前,系统做了这样的调用:int temp_a = a;                  int temp_b = b;swap(temp_a, temp_b),也就是说在swap中,你操作的实际上是temp_a和temp_b,最终结果不会对a、b造成影响,当然这种理解并不精确,只是为了方便说明;而传递指针时,传递的实际上是参数的地址,例如,对于函数:void swap(int *a, int *b),打个比方,如果a的地址是0xA,b的地址是0xB,这个地址对整个进程空间都是一致的,函数内部对地址内的值进行操作,因此最终会影响到a和b的值。

你有条件才交换的:

if(*pt1<*pt2)

因为*pt1为10,*pt2为1

10<1不成立,就不会调用swap了

反之,若a=1,b=10就会调用swap了


相关标签:小s

下一篇:帮忙看看是不是题目有问题。What_____yournewteacher______?

上一篇:一道关于迭代法的c语言题目,问题写在不懂的步骤旁边了,希望大佬解答,多谢

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?