期望带有指针和放大器的代码输出参考混合物

时间:2011-11-25 20:48:28

标签: c++ pointers reference cout

如果我们有这段代码:

char *i="Hello";

cout<<i<<endl;
cout<<*i<<endl;
cout<<&i<<endl;
cout<<*&i<<endl;
cout<<&*i<<endl;
cout<<*i**i<<endl;

我们怎么能期望&amp;在直接编译代码之前解释输出?

1 个答案:

答案 0 :(得分:1)

你不需要编译它就知道发生了什么是非常基本的。

cout<<i<<endl;

您正在输出char*(C字符串)i,因此会打印Hello(加上换行符)。


cout<<*i<<endl;

*ichar的第一个i'H',这就是打印的内容。


cout<<&i<<endl;

这只会打印ichar**)的地址。


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