如果我们有这段代码:
char *i="Hello";
cout<<i<<endl;
cout<<*i<<endl;
cout<<&i<<endl;
cout<<*&i<<endl;
cout<<&*i<<endl;
cout<<*i**i<<endl;
我们怎么能指望&在直接编译代码之前解释输出?
这是相当基本的,您不需要编译它就可以知道发生了什么。
cout<<i<<endl;
你输出的是char*
(C-string) i
,所以输出的是Hello
(加换行符)。
cout<<*i<<endl;
*i
是i
, 'H'
的第一个char
,这就是打印的内容。
cout<<&i<<endl;
这将打印i
(char**
)的地址。
cout<<*&i<<endl;
ie。*(&i)
。这将获得i
的地址,如上所述,为您提供char**
,然后对该地址解引用,为您提供char*
,即i
。因此,这将打印与第一行相同的内容。
cout<<&*i<<endl;
ie。&(*i)
。这将取消对i
的引用,从而得到字符串中的第一个char
('H'
),然后获得该char
的地址,从而得到char*
。char*
与上面的i
相同。
cout<<*i**i<<endl;
ie。(*i) * (*i)
。从第二行可以知道,*i
是'H'
, char
'H'
的十进制值是72。在char
s上执行乘法运算时,它们将被提升到int
。因此,输出将是72乘以72的int
结果,即5184。
因此该代码段将输出:
Hello
H
<The address of i>
Hello
Hello
5184