我不太理解引用作为形式参数(这可能源于我对指针和引用的理解不佳)。但在下面的代码中:
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++ 中,引用本质上是另一个变量的 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
来引用该值