百科狗-知识改变命运!
--

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

小肉包1年前 (2023-12-22)阅读数 5#综合百科
文章标签内存空间函数

这三个函数实现的功能是交换两个数,但实际只有第一和第三种可以成功交换原来的传进来的实参,第二种交换的是形参的值,并不会改变实参的值

首先,要知道一点,函数调用的实质都是实参按值传递给形参,所以第一、二种函数接受的实参都是 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 的值。

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

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

一次函数、二次函数、反比例函数、指数函数、幂函数、对数函数、三角函数、复合函数......

其实质是每一个x只有一个y与它对应,即一一映射......

但是一个y可能会有很多x与它对应......

所以例如圆就不是一个函数,因为它一个x有一个或两个的y对应......

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)