将临时指针传递给对象的温度指针
Passing a temp pointer to a temp pointer to an object
#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);
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它