没有按照我的要求执行

这个问题在这里已经有了答案:

  • 传递引用与价值传递之间有什么区别? 18个答案

  • 按值传递会创建参数的副本。 这是在该功能中更改的副本

    void add(int x){
       x = x+1;
    }
    

    因此,您所做的更改是针对副本而不是main范围中的变量(您期望看到更改)。

    如果您想通过将参数作为参数传递来更改函数中的变量,则不能通过值传递。 你可以改变你的函数来传递像这样的指针

    void add(int* x){
       *x = *x + 1;
    }
    

    并将整数的地址传递给像这样的函数

    int y=3;
    add(&y);
    

    main()

    指针仍然按值传递,因此它是正在执行的指针的副本,但这并不重要,因为您不改变指针本身,您正在更改它指向的变量的值。


    这个功能:

    void add(int x) {
        x = x + 1;
    }
    

    基本上这样说:创建一个名为add的函数,它返回nothing( void ),并且接受一个整数参数x 。 然后你调用这个函数:

    y = 3;
    add(y);
    

    这说“将名为y的变量设置为3.现在调用add()函数作为参数传递y的当前值,即3。

    add(3);
    

    参数x对函数add()完全是本地的。 它只存在于函数内部,并不影响它之外的任何东西。

    所以你的职能会尽职尽责地给你提供的数字加1,然后把它扔掉。 就像你告诉它的那样。

    与其他语言一样,C没有“通过引用传递”,在这种情况下,您可以告诉函数对变量本身而不是其当前值进行操作。 但是,它确实有指针,可以完成类似的事情。


    C中的所有函数参数都是按值传递的。 这意味着参数(在这种情况下,在add定义的x )被初始化为参数值的一个副本(在这种情况下, y的值为3 )。

    由于x是一个局部变量,正在执行

    x = x + 1;
    

    更改x的值,但该函数返回后x不再有效, x不再存在。

    请注意,参数不一定是变量的名称。 你可以像这样合法地调用你的函数:

    add(42);
    

    x被初始化为42 - 但x = x + 1肯定不会改变42的值。

    如果要修改该值,可以让该函数返回新值:

    int add(int x) {    
        return x + 1;
    }
    

    调用者可以对结果进行任何操作,包括将其分配回变量:

    int y = 3;
    y = add(y);
    

    或者你可以传递你想修改的对象的地址:

    int add(int *x) {
        *x = *x + 1;
    }
    

    然后调用者可以这样做:

    int y = 3;
    add(&y);
    

    这仍然是按值传递的,但传递的值是一个指针值,即x的地址。 这就是我们如何模仿C中的传递参考

    链接地址: http://www.djcxy.com/p/20613.html

    上一篇: doesn't execute as I want it

    下一篇: C++ passing by reference or by value?