指针 - 接收地址的函数是否可以获取int?

时间:2017-03-25 10:50:48

标签: c++ pass-by-reference

在这个例子中:

#include <iostream>
using namespace std;

void foo(int& x)
{
   x = x%2 + 10;
}

int* goo(int& y)
{
    y = y/100 + y%10;

    return &y;
}

void main()
{
    int temp = 1234;
    int *p = goo(temp);
    cout << temp << endl;
    foo(*p);
    cout << temp << endl;
}

goo函数获取int地址, 但是你可以看到main有一个你发送给这个函数的int temp。 该函数应该得到一个地址,但它得到int怎么可能?

我运行程序它确实有效,我不明白为什么。

1 个答案:

答案 0 :(得分:0)

这不是&#34; int&#34;的地址。松散定义,int的地址将是指针,这是goo返回的内容。它将引用传递给int类型的存储,或者用C语言说,int参数通过引用传递(在C中表示指针被传递)。引用接近指针,但不受指针数学的影响,并且与变量具有相同的语法。

函数goo()返回一个指向通过引用传递的参数的指针,本质上它返回指向temp的指针。这些是频繁的声明符,用于组合标识符:

  • 类型&安培; var - 对类型
  • 的引用
  • type * var - 指向
  • 的指针
  • 类型&安培;&安培; var - 对类型
  • 的右值引用

引用类型的变量不能被单元化,只能通过左值初始化它们。引用被评估为左值,评估到与用于初始化的左值相同的存储。

var=$(curl -sI "$url" | awk -F': *' '$1=="Content-Length"{print $2/(120*1024*1024)}')

除了重载运算符的形式参数列表,移动语义和模板构建之外,很少使用rvalue引用的声明。