将临时指针传递给对象的温度指针

Passing a temp pointer to a temp pointer to an object

本文关键字:指针 对象 温度      更新时间:2023-10-16
#include <iostream>
#include <tchar.h>
void output(int *param)
{
    std::cout << "Value: " << *param << std::endl;
};
int _tmain(int argc, _TCHAR* argv[])
{
    int i = 34;
    output(&i);
    return 0;
}

显然将"值:34"写入控制台。

,但是如果我进行以下更改

...
void output(int **param)
{
    std::cout << "Value: " << **param << std::endl;
}
...
    output(&(&i));
...

我得到了一个编译错误"'&amp;'需要L值"。

顺便说一句,我什至尝试进行以下更改:

output(&34);

确实感觉不错...不知何故。

我的问题是:为什么不允许使用&amp;在R值?汇编器级别上有一些原因吗?

您正在尝试获取对R值的引用,并且基本上没有定义,因为它始终是临时值,并且实际上从未在堆栈/堆上拥有地址。这就是为什么C 11引入R值参考,但这与您的问题完全不同。

获取您的代码以编译您的需求:

int   i = 34;
int* pi = &i;
output(&ip);

通过在pi中"接地"您的参考,您可以在堆栈上给编译器一个真实地址,可以给予output

您正在尝试获取地址的地址,而地址不是L值。(您可以非常粗略地将L值视为可以站在操作左侧的值。例如,变量和"命名值"是L值)

存储第一个地址。

int number = 4;
int* firstAddress = &number;
int** secondAddress = &firstAddress;
output(secondAddress);