• 【C++】如何理解函数调用中的传值和传址


    一.代码用例

            本篇文章使用以下代码进行阐述说明:

    1. #include
    2. void SwapValue(int x,int y)
    3. {
    4. int t = 0;
    5. t = x;
    6. x = y;
    7. y = t;
    8. printf("x = %d,y = %d\n",x,y);
    9. }
    10. void SwapAddress(int* x,int* y)
    11. {
    12. int t = 0;
    13. t = *x;
    14. *x = *y;
    15. *y = t;
    16. printf("x = %d,y = %d\n", *x, *y);
    17. }
    18. int main()
    19. {
    20. int a = 3;
    21. int b = 2;
    22. SwapValue(a,b);
    23. //SwapAddress(&a,&b);
    24. printf("a = %d,b = %d\n",a,b);
    25. system("pause");
    26. return 0;
    27. }

    二.形参和实参

            什么是形参?比如有以下的交换数值函数:

             

             其中int x,和int y就是形参,为什么叫形参?因为它们是没有数值的参数,类似两个没有装东西的瓶子:

            

            函数里面定义了这两个瓶子需要怎么用(例子中就是把两个瓶子里面的内容交换过来),这种行为就和数学中的函数表达式一样

             比如公式:ax+by=c,x和y就是形参,只有确定了x和y具体等于多少,再根据公式计算才能得出结果:

            图上在主函数中把具体数值传输到交换函数中去,这就是实参

     

     三.传值

            其实传值的具体核心上面已经全部讲完了,当主函数中把a和b的值复制一份给了X和Y,这样就导致四个瓶子里面有四个值:

            紧接着,瓶子x和y根据函数规则进行交换,从而使得两个瓶子的数值调换:

            所以可以得出最后的结果:

             总结:函数调用中的传值是把实参中的数据复制一份给形参,所以两个参数之间互不相干

    四.传址

            传址的意思就是把实参的地址直接给了形参,让形参通过地址来修改真正的值,在例子中就相当于两个形参x和y把a和b连数据带瓶子全部装进了瓶子中:

            然后再根据函数所示把瓶子里面的值进行互换:

            代码如下:

            输出之后你就会发现如下结果:

            总结:函数调用中的传址是把实参的本体放到了形参里,所以两个参数之间会互相干扰。

            题外话:如果将代码改成这样:

            效果就会变成和传值一样:

            因为这个的意思就是把瓶子X和瓶子Y里面的瓶子a和瓶子b互换:

                如果你不知道是为什么,那就快快拿起你的笔记本去学习一下指针的相关知识~~ 

  • 相关阅读:
    如何物理控制另一台电脑以及无网络用作副屏(现成设备和使用)
    专利说明书怎么写?
    自学视觉SLAM(1)
    淘宝/天猫淘宝评论问答列表接口 API
    每日汇评:黄金将测试1935美元的200日移动均线
    docker笔记
    云数据库技术行业动态@2022-09-30
    三相PWM整流器滞环电流控制MATLAB仿真模型
    使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
    WebDAV之葫芦儿·派盘+无聊笔记
  • 原文地址:https://blog.csdn.net/qq_41884002/article/details/126662940