问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...C语言比较两个数的大小,调用这几种函数分别有什么不同,希望给详细解...

发布网友 发布时间:2024-10-03 16:30

我来回答

2个回答

热心网友 时间:2024-10-11 18:15

        这三个函数实现的功能是交换两个数,但实际只有第一和第三种可以成功交换原来的传进来的实参,第二种交换的是形参的值,并不会改变实参的值
        首先,要知道一点,函数调用的实质都是实参按值传递给形参,所以第一、二种函数接受的实参都是 int 类型两个数据,此处假设分别是 a 和 b ,而第三种函数接受的实参是一个 int 类型数据的地址,即为 &a 和 &b (此处的 & 表现为 “ 取地址符 ” ,在 C 语言中 & 具有多种功能,比如后面表现出来的 “ 引用符号” 的作用,这称作运算符的重载 )。

        那么开始分析函数:

        第一种,形参为 int & x 和 int & y(此处的 & 表现为 “ 引用符号 ” )

        执行的操作为 

        int & x = a ;
        int & y = b ;

        其中 x 和 y 分别是 a 和 b 的引用, 如果我们把变量名理解为一段内存空间的标识符,那么引用可以理解对一段内存空间的另一个标识符,也就是说同一段内存空间可以用多个名字来标志。因为 x 和 a 表示的是同一内存空间的标识符,所以修改 x 所代表的内存空间的值就相当于修改 a 所代表的内存空间的值,y 与 b 的关系同理。

        

        第二种,形参为 int x 和 int y

        执行的操作为

        int x = a ;
        int y = b ;

        其中 x 和 y 都是局部变量,x 和 y 所代表的内存空间与 a 和 b 所代表的内存空间不同,这里把 a 和 b 所代表的内存空间的值通过赋值操作分别拷贝了一份,送给了 x 和 y所代表的内存空间,即 x 和 y 所代表的内存空间的值分别与 a 和 b 所代表的内存空间的值是相同的,但它们所代表的内存空间是不一样的,即内存空间的地址不同。所以交换 x 和 y 的内存空间的值并不会影响 a 和 b 的内存空间的值。


        第三种,形参为 int * x 和 int * y

        执行的操作为

        int * x = &a ;
        int * y = &b ;

        其中 x 和 y 分别是指向了 a 和 b 的内存空间的指针,x 和 y 也是局部变量,所以跟第二种函数一样,他们与 a 和 b 的内存空间也是不一样的,但是不同点在于,x 和 y 的内存空间里所存储的值是 a 和 b 的地址。所以通过 *x 和 *y 来访问 a 和 b 空间里值,这里的 * 表示是 “ 间接访问符 ”(与 & 一样,也是 * 的一种重载),它的功能是把 x 和 y 空间中的值(a 和 b 的内存空间的地址)当作地址找到 a 和 b 的内存空间,因此 *x 与 a 是等价的,*y 与 b 是等价的。所以交换 *x 和 *y 的值 就是交换 a 和 b 的值。

        最后,总结一下,第一种引用交换和第三种指针交换的区别在于,指针需要另外开辟新的空间来储存地址,而引用并不需要额外的空间。

热心网友 时间:2024-10-11 18:09

设a=1,b=2设swap(a,b)
第一个的意思是&x=a,&y=b;传引用此时x,y是a,b的“小名”就相当于a,b即对x的操作就相当于对ab的;
第二个相当于swap(a,b)=swap(1,2),调用一下swap(1,2)a,b的值肯定不变;
第三个指针调用函数差不多相当于int *x=a,int *y=b;即给a,b分别建立了一个指针,此时函数里面
*x就等于a,*y=b所以...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 如果不引入第3个变量t,如何实现变量x和y的交换?请写出交换语句。 广发银行-E秒贷产品大纲 为什么手机会响一声就挂断? 财务部都有什么工作 小车的正时皮带多久换? a78l是什么意思 蚕丝被的保养 如何保养蚕丝被 蚕丝被的保养(蚕丝被如何保养) 麻黄根的副作用 麻黄根的功效与作用 麻黄根的药用价值 麻黄根的功效与作用麻黄根的功效与作用有哪些 麻黄根名家论述 麻黄根中药化学成分 板栗怎么保存较好 剥好板栗怎么保存 如何培养学生的阅读习惯班会教师发言稿 碗莲喜欢阳光吗 碗莲是喜阳的植物吗 情侣网名 伊诺配什么好 找几部比较新有“基情”的电影,口味要清新的,太黄太暴力pass掉,有木有... 很黄的美剧排行(有什么吸血鬼题材的美剧吗) 查肺结核怎么查 消化系统疾病看什么科 看胃挂哪个科的号 刚做完老公会发现吗? 在山里发现一棵野生核桃树 这棵树能属于我么 肺结核病怎样才算治愈 肺结核如何确定已治愈 肺结核什么症状算是治好了 肺结核做什么检查才能说明结核杆菌已经稳定了,已经抗结核治疗三十六天了... CT怀疑肺结核确诊率多高 我的外公今天到医院打个增强CT,得到是这样的结果,我想问一下这样的结 ... 如何诊断肺结核? 请问侵蚀性葡萄胎化疗四个疗程了,hcg还有8点多可以吃中药代替化疗... 完全性葡萄胎化疗中能吃全蝎吗? 侵蚀性葡萄胎可以吃鸡蛋不 恶性葡萄胎化疗后出现感冒应该怎么办? 侵蚀性葡萄胎治疗原则 什么是侵蚀性葡萄胎 我的CT片症状是不是肺结核,急急急 【ct检查报告单】麻烦高人解释一下谢谢了!!! 怎么设置英文qq?