如何解决请帮我澄清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
返回之后,a
和b
之间没有任何魔术隐藏的依赖关系。
我在想,如果我将长度增加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 举报,一经查实,本站将立刻删除。