【问题标题】:Why changes the '&' character the output for these two codes?为什么要更改这两个代码的输出中的“&”字符?
【发布时间】:2020-03-01 04:02:21
【问题描述】:

第一个代码:

int a = 1;

void func(int* ptr) {
    ptr = &a;
}

int main() {
    int nvar = 2;
    int* pvar = &nvar;
    func(pvar);
    std::cout << *pvar;
}
//Output: 2

第二个代码:

int a = 1;

void func(int*& ptr) {
    ptr = &a;
}

int main() {
    int nvar = 2;
    int* pvar = &nvar;
    func(pvar);
    std::cout << *pvar;
}
//Output: 1

唯一的区别是 'func' 函数中的 '&' 字符。但是有人可以解释一下,在这种情况下它会做什么?

【问题讨论】:

  • 听起来你可以使用good C++ book
  • 您认为&amp; 运算符的作用是什么?我想你有它的目的?
  • 我知道它的作用,但是在第二个代码中它与 * 组合在一起,我不知道这种组合意味着什么
  • 首先,ptr是按值传递的,所以函数返回后调用者看不到赋值给它的效果。在第二个中,ptr 通过引用传递(由于&amp;),因此在函数返回后调用者可以看到赋值的效果。

标签: c++ pointers reference dereference


【解决方案1】:

我知道它的作用,但是在第二个代码中它与 * 组合在一起,我不知道这种组合意味着什么

T&amp; 表示“引用T”。

现在将T 替换为您喜欢的任何内容。例如,对于指向intT==int* 的指针,我们有int*&amp;,它是对指向int 的指针的引用。

将非指针作为引用传递给函数没有什么不同。当 ptr 按值传递时,func 在副本上工作,当通过引用传递时,func 在传入的实例上工作。

【讨论】:

  • @klutt 请不要那样做。我要为答案投票,而不是为我的名字投票
  • 不是很严重。这只是为了你的答案。我喜欢你的名字只是一种满足的方式。
【解决方案2】:

&amp; 表示passing by reference

按引用传递和按值传递的区别在于,在被调用函数中对通过引用传入的参数所做的修改在调用函数中生效,而在被调用函数中对按值传递的参数所做的修改函数不能影响调用函数。如果要修改调用函数中的参数值,请使用 pass-by-reference。否则,使用按值传递来传递参数。

我认为这比我说的要好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2015-09-24
    相关资源
    最近更新 更多