• C语言函数参数的传递的学习


    C语言函数参数的传递的学习


    1.值传递

    void Exchg1(int x, int y)
    {
       int tmp;
       tmp = x;
       x = y;
       y = tmp;
       printf("x = %d, y = %d\n", x, y);
    }
    int main()
    {
       int a = 4,b = 6;
       Exchg1(a, b);
       printf("a = %d, b = %d\n", a, b);
       return(0);
    }
    

    输出结果:
    x=6,y=4
    a=4,b=6
    分析:a,b的值没有发生改变。 这里Exchg1()函数有个隐含操作,int x=a,y=b。故在函数里改变的是x,y的值,不改变ab。即改变了形参,没有改变实参。


    2.地址传递

    void Exchg2(int *px, int *py)
    {
       int tmp = *px;
       *px = *py;
       *py = tmp;
       printf("*px = %d, *py = %d.\n", *px, *py);
    }
    int main()
    {
       int a = 4;
       int b = 6;
       Exchg2(&a, &b);
       printf("a = %d, b = %d.\n", a, b);
       return(0);
    }
    

    输出结果:
    *px = 6, *py = 4.
    a = 6, b = 4.
    分析:a,b的值发生改变。 这里Exchg2()函数有个隐含操作, x=(&a),y=(&b),注意这里x,y为指针类型。这里传入的是a,b的地址,函数里是对地址里面的值进行改变,故a,b的值改变。


    3.引用传递

    void Exchg3(int &x, int &y)
    {
       int tmp = x;
       x = y;
       y = tmp;
       printf("x = %d,y = %d\n", x, y);
    }
    int main()
    {
       int a = 4;
       int b = 6;
       Exchg3(a, b);
       printf("a = %d, b = %d\n", a, b);
       return(0);
    }
    

    输出结果:
    x=6,y=4
    a=6,b=4
    分析:a,b的值发生改变。函数中x、y前都有一个取地址符号“&”,这里的形参为引用类型,引用与实参进行绑定,作为实参的别名。故传入实参后,函数对引用的操作,就是对实参的操作,所以实参会发生改变。

    "学习原文"

    Don't aim for success if you really want it.Just stick to what you love and believe in.And it will come naturally.
  • 相关阅读:
    LintCode Update Bits
    LintCode Flip Bits
    LintCode Wood Cut
    LintCode Sqrt(x)
    LintCode Binary Search
    LintCode Subarray Sum Closest
    Huffman编码(Huffman树)
    DFS应用——查找强分支
    DFS应用——遍历有向图+判断有向图是否有圈
    DFS应用——找出无向图的割点
  • 原文地址:https://www.cnblogs.com/wryy/p/13170268.html
Copyright © 2020-2023  润新知