【问题标题】:Can i pass (*ptr) to a function which is taking reference as argument我可以将 (*ptr) 传递给将引用作为参数的函数吗
【发布时间】:2023-04-01 05:35:01
【问题描述】:
#include<vector>
using namespace std;

struct x{
    vector<int> y;
};
void magic(struct x& d)
{
    d.y[0] = 5;
}
int main() {
    struct x d;
    d.y = {1,2,3};

    struct x* z = &d;
    magic(*z);

    cout<<z->y[0];
    return 0;
}

此代码是否有效以及如何?我们可以将 *z 传递给需要 c++ 引用的函数吗?

【问题讨论】:

  • 该函数引用了x,而您传递给它的是x。这类似于x &amp;d= *z;。为什么你认为这不起作用?
  • ...或者更一般地说,d*z 之间为什么会有任何区别?
  • 在C语言中,你需要做struct x d;。在C++中,只需要x d;
  • #include &lt;bits/stdc++.h&gt; using namespace std; - No, no, no,不要永远那样做。

标签: c++ pointers reference pass-by-reference


【解决方案1】:

指针z指向对象d

struct x* z = &d;

取消对指针的引用,您将获得对象 d 的左值,该对象 d 作为参数通过引用传递给函数

magic(*z);

所以没有魔法。

其实这两个调用

magic( *z );

magic( d );

是等价的。唯一的区别是在第一次调用中使用了更复杂的表达式。

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多