Поскольку 'A'
не является указателем, это char
, 65 или 41 16 , если базовый набор символов ASCII.
"Stack"
, с другой стороны, является строкой, в основном массивом символов {'S', 't', 'a', 'c', 'k', '\0'}
, который ухудшается до указателя на свой первый символ.
Ваша "разница между static_cast
и ()
" была получена здесь , намного лучше, чем я мог.
Причина, по которой вы получаете мусор с char var = 'x'; cout << &var ...
, заключается в том, что &var
- это char *
, что означает, что его обрабатывают как строку - вв этом случае cout
выводит символы до конечного нулевого символа \0
, которого нет или находится за пределами символа.Следующий код показывает это:
#include <iostream>
int main() {
//int q1 = 0;
char xx = 'x';
//int q2 = 0;
std::cout << &xx << std::endl;
return 0;
}
вывод:
x~Í"
Когда вы раскомментируете строки q
, это работает, потому что это ставит нули вокруг символа, выводя x
сам по себе).Имейте в виду, что это не кошерный C, он работает только из-за того, как организован мой стек.Не используйте это настоящий код.