为什么这个C++代码的工作方式

Why this C++ code works the way it works?

本文关键字:工作 方式 代码 C++ 为什么      更新时间:2023-10-16
# 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 与

4 * 2/2 相同,或者就像后退一步然后向前走会让你处于前进然后后退一步的同一位置。

要理解第二个语句的工作原理,请替换它

cout << &*name << endl;

cout << &name[0] << endl;

因为 *name 和 name[0] 是等效的,并且返回对 (lvalue( 由名称指向的字符串文本的第一个字符的引用。

最后一条语句等效于

cout << name << endl;