首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按值传递vs按引用传递vs按值传递结果

按值传递vs按引用传递vs按值传递结果
EN

Stack Overflow用户
提问于 2014-07-23 08:31:13
回答 1查看 22.8K关注 0票数 4

我有这个问题,我对打印的内容有点困惑,特别是对于按引用传递的内容。如果有两个参数,传递给x的值是什么?谢谢!

考虑下面的程序。对于以下每种参数传递方法,打印什么内容?

a.通过值传递

b.通过引用传递

c.通过value-result传递

代码语言:javascript
复制
void main()
{
    int x = 5;
    foo (x,x);
    print (x);      
}

void foo (int a, int b)
{
    a = 2 * b + 1;
    b = a - 1;      
    a = 3 * a - b;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-23 08:59:07

前两个应该非常简单,后一个可能会让你大吃一惊,因为它不是真正的C++支持的构造。这是不久前在Fortran和Ada中看到的东西。有关更多信息,请参阅this post

至于你的结果,我认为你会得到这样的结果:

1)

代码语言:javascript
复制
5

2)

代码语言:javascript
复制
x = 5,
a = 2 * 5 + 1 = 11
b = 11 - 1 = 10
a = 3 * 10 - 10 = 20;  // remember, a and b are the same reference!
x = 20

3)考虑这一点(以C++样式)。我们将x复制到一个变量中,通过引用传递该变量,然后将结果复制回x:

代码语言:javascript
复制
void main()
{
    int x = 5;
    int copy = x;
    foo (copy,copy);  // copy is passed by reference here, for sake of argument
    x = copy;
    print (x);      
}

由于foo函数中没有任何内容直接与x一起使用,因此您的结果将与#2相同。

现在,如果我们在foo上有这样的东西

代码语言:javascript
复制
void foo (int a, int b)
{
    a = 2 * b + 1;
    x = a - 1;      // we'll assume x is globally accessible
    a = 3 * a - b;
}

然后#2将产生相同的结果,但#3将如下所示:

代码语言:javascript
复制
a = 2 * 5 + 1 = 11
x = 11 - 1 = 10  // this no longer has any effect on the final result
a = 3 * 11 - 11 = 22
x = 22
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24900011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档