C++ 引用作为函数中的参数需要取消引用指针?

问题描述 投票:0回答:1

我不太理解引用作为形式参数(这可能源于我对指针和引用的理解不佳)。但在下面的代码中:

void func(int &kTemp){
     //do something
}

int main() {

     int k = 3;
     int *pK = &k;

     func(*pK);

     return 0;
 }

为什么“func(*pK)”是正确的调用?这不是取消引用 pK 并传递 k 中保存的值吗?这是否意味着我正在将一个值传递到需要引用的函数中?为什么“func(pK)”不正确?我看到这是通过一个指针传递到一个引用参数,但该指针的值是 k 的地址。

该函数是否理解,当我向其中传递一个值 (*pK) 时,它应该获取此项的引用?或者 *pK 实际上不是一个值,正如我所理解的那样?

c++ pointers reference
1个回答
0
投票

在 C++ 中,引用本质上是另一个变量的 alias,这意味着当引用被修改时,它所引用的变量也会被修改。

以下面的代码为例:

int foo = 0;
int &bar = foo;

// if we add 2 to 'bar', 2 will also be added to 'foo'
bar++;

当你说

func(int &a);

你是说 bar 是一个参考。如果将变量

b
传递到
&a
参数中,
a
将是
b
的引用(别名)。当
a
参数修改时,
b
也会以同样的方式修改。这就是为什么您可以安全地将非指针传递到引用参数,同时仍然修改函数外部的变量。

当你写入

*pK
时,它会获取
pK
指向的值,然后可以通过参数
&kTemp

来引用该值
© www.soinside.com 2019 - 2024. All rights reserved.