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