繁体   English   中英

C++ 将指针传递给具有引用参数的函数

[英]C++ passing in pointer to a function with reference parameters

我理解调用 foo(value) 很好,但是调用 foo(*p) 是如何产生相同的结果的? 我以为它会出错,但它工作得很好。

*p 是取消引用指针,获取存储在 p 中的地址处的,所以它不等同于调用 foo(5) 吗?

void foo(int &ptr)
{
    ptr = 6;
}

int main()
{
    using namespace std;
    int value = 5;
    int *p = &value;
    cout << "value = " << value << '\n';
    foo(*p);
    cout << "value = " << value << '\n';
    return 0;
}

*用于解引用指针的运算符返回左值,就像标识符代表变量(例如value ,它是一个主要表达式。 因此,它们都将被接受作为参考参数。

N3337 5.1.1 一般(5.1 主要表达式):

8 标识符是一个 id 表达式,前提是它已被适当声明(第 7 条)。 [...] 表达式的类型是标识符的类型。 结果是由标识符表示的实体。 如果实体是函数、变量或数据成员,则结果为左值,否则为纯右值。

N3337 5.3.1 一元运算符:

1 一元 * 运算符执行间接操作:应用它的表达式应是指向对象类型的指针或指向函数类型的指针,结果是引用表达式指向的对象或函数的左值。 如果表达式的类型是“指向 T 的指针”,则结果的类型是“T”。

首先,当您取消引用指针 p 时,您会得到一个整数值(因为您将其声明为指向整数的指针)。 在这种情况下,取消引用 p 会为您提供 'value' 变量的值。 陪我到此为止?

那么现在,函数调用中发生了什么? 程序取消引用指针 p,然后将您的变量(值)的左值引用传递给函数。 该函数被定义为接受一个引用(一个带有一些语法糖的指针)。 所以是的,你认为它被取消引用到一个整数是正确的。 但是,C++ 无论如何都会传递值变量的地址,而不是整数变量,因为您已经告诉它只接受函数中的引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM