Приведение и использование указателя, как это, является неопределенным поведением. Вы не можете просто взять указатель на char
и сделать вид, что он указывает на int
и ожидать, что он будет работать правильно. По всей вероятности, стек поврежден, потому что int
занимает больше памяти, чем char
, поэтому, делая *pnum = '9';
, вы записываете в недопустимую память. char
имеет размер 1
, но *pnum = '9';
, вероятно, изменит больше памяти, чем этот (int
обычно имеет размер 4
). Таким образом, если в стеке зарезервирован 1 байт памяти для char
, каковы эти три байта, которые он модифицирует?
Используйте char*
, чтобы указать на char
вместо:
int main() {
char num = 'A';
char* pnum = #
*pnum = '9';
std::cout << num << std::endl;
}