为什么这个C++代码的工作方式
Why this C++ code works the way it works?
# include <iostream>
using namespace std;
int main(void)
{
char *name = "Stack overflow";
cout << *&name << endl;
cout << &*name << endl; // I don't understand why this works
return 0;
}
我理解第一个"cout"语句是如何工作的,但无法理解为什么以及如何工作。
&
和*
是相反的操作。第一个获取数组的地址(添加一个间接寻址级别(,然后取消引用它(删除一个间接寻址级别(。第二个取消引用指针(删除一个间接寻址级别(,然后获取结果的地址(添加一个(。无论哪种方式,您都会返回到相同的值。
4 * 2/2 相同,或者就像后退一步然后向前走会让你处于前进然后后退一步的同一位置。
要理解第二个语句的工作原理,请替换它
cout << &*name << endl;
为
cout << &name[0] << endl;
因为 *name 和 name[0] 是等效的,并且返回对 (lvalue( 由名称指向的字符串文本的第一个字符的引用。
最后一条语句等效于
cout << name << endl;
相关文章:
- 在 Eclipse 中添加库的工作方式是否与在 Visual Studio 中相同?
- OpenGL应用程序在不同的计算机上的工作方式不同
- 为什么我的代码在添加不相关的代码行后工作方式不同?
- wait_until在主线程而不是主线程中的工作方式不同吗? c ++
- 用于了解输入和输出流缓冲区实际工作方式的程序
- 查找函数在unordered_map中的工作方式是搜索键值
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- 容器类别在STL中的工作方式
- Unity 的 HLSL/Cg 预处理器工作方式错误?
- 无法让我了解 cin.get 和 cout 在这里的工作方式
- 不了解C 集合的工作方式
- 有人可以解释C 操作员=此处的工作方式
- 了解 declval 在copy_assignment情况下的工作方式
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 了解文件页在技术级别的工作方式
- 战俘的工作方式不同,详细解释
- 切换到新编译器后,SSCANF 的工作方式有所不同
- 为什么三元运算符在编译时的工作方式与运行时不同?
- 对运算符删除覆盖的工作方式感到困惑
- 在两种情况下,铸造的工作方式不同