如果我们有这段代码:
char *i="Hello";
cout<<i<<endl;
cout<<*i<<endl;
cout<<&i<<endl;
cout<<*&i<<endl;
cout<<&*i<<endl;
cout<<*i**i<<endl;
我们怎么能期望&amp;在直接编译代码之前解释输出?
答案 0 :(得分:1)
你不需要编译它就知道发生了什么是非常基本的。
cout<<i<<endl;
您正在输出char*
(C字符串)i
,因此会打印Hello
(加上换行符)。
cout<<*i<<endl;
*i
是char
的第一个i
,'H'
,这就是打印的内容。
cout<<&i<<endl;
这只会打印i
(char**
)的地址。
cout<<*&i<<endl;
即。 *(&i)
。这将获得上述i
的地址,为您提供char**
,然后取消引用该地址,以便为您提供char*
i
。所以这将打印与第一行相同。
cout<<&*i<<endl;
即。 &(*i)
。这将取消引用i
,为您提供字符串中的第一个char
('H'
),然后获取char
的地址,为您提供char*
。 char*
与上面i
相同。
cout<<*i**i<<endl;
即。 (*i) * (*i)
。如您所知,第二行*i
为'H'
,char
'H'
的小数值为72.在char
s上执行乘法时,他们将晋升为int
。因此输出将是72的int
结果乘以72,即5184。
因此该片段将输出:
Hello
H
<The address of i>
Hello
Hello
5184