全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2023-07-30 10:32

人气:

作者:admin

标签: LINUX内核  Linux系统 

导读:首先有一种情况,是必须要传地址的,比如交换两个数字。...

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

首先有一种情况,是必须要传地址的,比如交换两个数字。

voidswap(int*x,int*y)
{
    int t = *x;
    *x = *y;
*y=t;
}


int main()
{
    int a = 1, b = 2;
swap(&a, &b);

    return 0;
}
凡是这种涉及到在函数内部修改实参值的,都得要传地址才行,通过地址来间接得修改。

再比如我们前两天讲的,函数如何返回多个数据,也可以提前申请好一块内存,把内存的地址传过去,然后把要返回的多个数据保存在这块内存中,也能解决问题。
voidtest(int*a)
{
    /*结果保存在a中*/
}


int main()
{
intresult[5] = {0};
test(result);

    return 0;
}
除了这种必须传地址的情况,剩下的可以传地址,也可以不传地址,但是传地址的话有时候效率更高。
struct Test
{
int a[1024];
};
比如我们写代码的时候经常用到结构体,我写的这个结构体占了4096字节,如果直接传值,那么形参也要分配4096个字节,而且还得把实参的数据拷贝过来。

但是如果换成地址传递,形参只需要4个字节或者8个字节,保存结构体的地址就行,这种方式,将会大大提高函数调用的效率。

如果结构体再大一些,比如他要占用兆级别的内存空间,如果还是传值,那程序就会很容易奔溃,因为程序的栈空间是有限的,在Linux中默认是8M,过度使用的话,很容易超出它的限制,结果就会不可控。

所以调用函数的时候应该选择传值还是传地址,没有固定的说法。

传值操作简单,通俗易懂,但是对于一些复杂的类型,浪费时间也浪费空间。

17623418-2def-11ee-815d-dac502259ad0.png  

传地址虽然理解起来困难一些,但它能在函数内部去访问实参,对于一些复杂的类型,既能提高调用的效率,又能节省空间。

17913e70-2def-11ee-815d-dac502259ad0.png 





审核编辑:刘清
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信