Это довольно просто, что вам не нужно компилировать его, чтобы знать, что происходит.
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
. Таким образом, результатом будет int
результат 72, умноженный на 72, который равен 5184.
<Ч />
Поэтому этот фрагмент будет выводить:
Hello
H
<The address of i>
Hello
Hello
5184