为什么调用函数的时候,有些情况下要传地址?传地址有什么好处?

为什么调用函数的时候,有些情况下要传地址?传地址有什么好处?
首先有一种情况,是必须要传地址的,比如交换两个数字。
void swap(int *x, int *y){ int t = *x; *x = *y;    *y = t;}int main(){ int a = 1, b = 2;    swap(&a, &b);     return 0;}凡是这种涉及到在函数内部修改实参值的,都得要传地址才行,通过地址来间接得修改。
再比如我们前两天讲的,函数如何返回多个数据,也可以提前申请好一块内存,把内存的地址传过去,然后把要返回的多个数据保存在这块内存中,也能解决问题。void test(int *a){ /*结果保存在a中*/}int main(){    int result[5] = {0};    test(result);     return 0;}除了这种必须传地址的情况,剩下的可以传地址,也可以不传地址,但是传地址的话有时候效率更高。struct test{    int a[1024];};比如我们写代码的时候经常用到结构体,我写的这个结构体占了4096字节,如果直接传值,那么形参也要分配4096个字节,而且还得把实参的数据拷贝过来。
但是如果换成地址传递,形参只需要4个字节或者8个字节,保存结构体的地址就行,这种方式,将会大大提高函数调用的效率。
如果结构体再大一些,比如他要占用兆级别的内存空间,如果还是传值,那程序就会很容易奔溃,因为程序的栈空间是有限的,在linux中默认是8m,过度使用的话,很容易超出它的限制,结果就会不可控。
所以调用函数的时候应该选择传值还是传地址,没有固定的说法。
传值操作简单,通俗易懂,但是对于一些复杂的类型,浪费时间也浪费空间。
传地址虽然理解起来困难一些,但它能在函数内部去访问实参,对于一些复杂的类型,既能提高调用的效率,又能节省空间。

谷歌开发新操作系统Fuchsia
交流耦合 TIA 拒绝明亮的环境光源
基于GPRS的远程IAP系统方案的终端产品设计
5V,5W至15W电源如何实现预升压
5G竞赛全面打响 最大赢家会是广电?
为什么调用函数的时候,有些情况下要传地址?传地址有什么好处?
vivo聚光计划第四场落下帷幕,聚焦金融电商行业营销讨论
BGA和QFP之间的比较及发展趋势简介
微软新项目Insider20年前就实现了
光纤照明和LED灯的应用
郭台铭的疯狂与富士康的撤离!
什么是小程序系统开发小程序分销平台商城开发系统需要多少钱
意法半导体的ST60A3连接器优势分析
自拍神器!OPPO F3 Plus发布在即:大光圈自拍碉堡了
英飞特2018年业绩比2017年同期上升160%-190%
安防行业正在迅速与人工智能相互融合 集成商需正视AI的挑战与影响
骨传导耳机选购推荐,性价比很高的几款运动耳机
移远通信与中国联通合作推动更多行业顺利实现智能化转型升级
疫情消息:苹果市值跌破万亿 百度成立互联网医院 Facebook有新动作
一加5什么时候上市?一加5这次真的要来了,或与6月发布