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

时间:2013-12-01 23:00:40

标签: c++

# 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”语句如何工作但无法理解第二个语句为何以及如何工作。

2 个答案:

答案 0 :(得分:7)

&*是相反的操作。第一个获取数组的地址(添加一个间接级别),然后解除引用(删除一个间接级别)。第二个取消引用指针(删除一个间接级别),然后获取结果的地址(添加一个)。无论哪种方式,你都会回到相同的价值。

就像4/2 * 2与4 * 2/2相同,或者就像退后一步然后向前离开你一样,向前迈出一步然后向后退。

答案 1 :(得分:3)

要理解第二个陈述如何替代它

cout << &*name << endl;

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

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

最后一句话相当于

cout << name << endl;
相关问题