微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

请帮我澄清C ++传递的价值?

如何解决请帮我澄清C ++传递的价值?

struct rec {
    int length;
    int breath;
};

int area(rec objrec1) {
    objrec1.length ++;
    //objrec1.breath;
    //int result= objrec1.length++ * objrec1.breath;
    return(objrec1.length++ * objrec1.breath);
    //return(result);
}

int main() {
    rec objrec = { 10,5 }; // create object to access struct
    int arearesult;
    arearesult = area(objrec); // we pass the whole struct into the parameter
    cout << arearesult << endl;
}

我的问题是,如果实际参数未对形式参数进行更改,返回主“ arearesult”时长度(++)的增加如何影响结果,使答案变为55而不是50。因为我在考虑是否将长度增加1使其变为11,但是当到达main()时它将变为无效并返回10,因为实际和形式参数中的长度不同。谢谢

解决方法

您的问题可以归结为:

#include <iostream>

int foo ( int x ) { 
    x = 42;
    return x; 
}

int main {
    int a = 1;
    int b = 2;
    a = foo( b );
    std::cout << a << ' ' << b;
}

b按值传递。不能通过调用foo来修改它,因为foo修改了b的副本。 a未传递给函数,但获得分配的返回值。之后,它的值与以前不同。

main中a的值为42,因为那是从foo返回的值。在foo返回之后,ab之间没有任何魔术隐藏的依赖关系。

,

我在想,如果我将长度增加1使其变为11,但是当它到达main()时将变得无效并返回10

没有 没有单个变量length。您有两个独立的对象,每个对象都有自己独立的length

我们可以将您的通话改写为

int main() {
    rec objrec = { 10,5 }; // create object to access struct
    int arearesult;

    // manually inline this call:
    // arearesult = area(objrec); // we pass the whole struct into the parameter
    // int area(rec objrec1)
    {
        rec objrec1 = objrec;

        objrec1.length ++;

        arearesult = objrec1.length++ * objrec1.breath;

    } // objrec1 ceases existing here,objrec is unaffected

    cout << arearesult << endl;
}

,您会发现在初始化调用objrec之前,根本没有触及objrec1。更改objrec1.length不会影响objrec.length

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。