• 函数调用、值传递、引用传递、实参与形参


    1、有参函数需要虚实结合

    2、形参不占内存,实参占内存 (值在栈空间中,引用在堆空间中)

    3、如果在函数调用时是值传递如 c = max(a,b) a,b是一个值,值传递是单向传递,形参的改变不影响实参的改变

    4、如果 c = max(&a,&b),则会影响a,b的值

          如果 c = max(&a,b) ,则会影响a的值

          如果 c = max(a,&b) ,则会影响b的值

     例子:

    分析:

    实参:a,b 形参:x,y

    由于是值传递:x,y无论数值如何改变,都不会影响a,b的数值

     空间上:a,b,x,y都开辟了自己的空间存储值和地址的值

    int add(int a,int b){...}只会对返回值z产生影响,不会对a,b产生影响

     值传递的代码实现

    1. #include "stdio.h"
    2. #include "windows.h"
    3. #include "stdlib.h"
    4. //值传递
    5. int z;
    6. int main() {
    7. int a = 5;
    8. int b = 6;
    9. z = a - b;
    10. printf("z的值:%d\n", z);//打印z的值
    11. void swap(int x, int y);
    12. void printvalue(int i, int j);
    13. //没有交换a,b的值 a,b的值的作用域在main里 没有在swap中
    14. swap(a,b);
    15. printvalue(a, b);
    16. z = a - b;
    17. printf("main里z的值:%d\n", z);//打印main里z的值
    18. return 0;
    19. }
    20. //针对a,b值互换进行操作
    21. void swap(int x, int y) {
    22. int temp;
    23. temp = x;
    24. x = y;
    25. y = temp;
    26. z = x - y;
    27. printf("swap里z的值:%d\n", z);//打印swap里z的值
    28. }
    29. void printvalue(int i, int j) {
    30. printf("a=%d,b=%d\n", i, j);
    31. }
    32. //
    33. //z的值: - 1
    34. //swap里z的值:1
    35. //a = 5, b = 6
    36. //main里z的值: - 1
    37. //
    38. //从打印的结果显示,a,b传递进去后进行值交换只在swap(x,y)中起作用,回到main里a和b的值并没有改变

     //
    //z的值: - 1
    //swap里z的值:1
    //a = 5, b = 6
    //main里z的值: - 1
    //
    //从打印的结果显示,a,b传递进去后进行值交换只在swap(x,y)中起作用,回到main里a和b的值并没有改变
     

    引用传递的代码实现

    1. #include "stdio.h"
    2. #include "windows.h"
    3. #include "stdlib.h"
    4. //值传递
    5. int z;
    6. int main() {
    7. int a = 5;
    8. int b = 6;
    9. z = a - b;
    10. printf("z的值:%d\n", z);//*q取的是z的值
    11. void swap(int x, int y);
    12. void printvalue(int i, int j);
    13. //没有交换a,b的值 由地址指针指向不同的值 导致在输出时发现值是交换的
    14. swap(a,b);
    15. printvalue(a, b);
    16. z = a - b;
    17. printf("main里z的值:%d\n", z);//*q取的是z的值
    18. return 0;
    19. }
    20. //针对地址的指针进行操作
    21. void swap(int x, int y) {
    22. int temp;
    23. temp = x;
    24. x = y;
    25. y = temp;
    26. z = x - y;
    27. printf("swap里z的值:%d\n", z);//*q取的是z的值
    28. }
    29. void printvalue(int i, int j) {
    30. printf("a=%d,b=%d\n", i, j);
    31. }
    32. //
    33. //z的值: - 1
    34. //swap里z的值:1
    35. //a = 5, b = 6
    36. //main里z的值: - 1
    37. //
    38. //从打印的结果显示,a,b传递进去后进行值交换只在swap(x,y)中起作用,回到main里a和b的值并没有改变

     ​​​

  • 相关阅读:
    threadLocal为什么线程安全
    Profile注解
    网络编程与HTTP协议
    FPGA实现SDI硬件解码UDP网络传输,送工程源码和QT上位机显示程序
    生物医疗行业线上推广解决方案_上海添力
    三维度:专业、展现与连接
    Spark 【RDD编程(一)RDD编程基础】
    1688获得商品详情接口调用展示
    数字人直播系统源码交付,数字人直播软件下载迎来普及化
    动态调试python源码的步骤与案例
  • 原文地址:https://blog.csdn.net/m0_51750419/article/details/127617359