当代码执行变量num时,获取值'9'
,则发生错误。
char num = 'A';
int* pnum = (int *)#
*pnum = '9';
错误是什么意思?
像这样强制转换和使用指针是未定义的行为。您不能只获取指向char
的指针,并假装它指向int
并期望它正常工作。堆栈很可能被损坏,因为int
比char
占用更多的内存,所以通过执行*pnum = '9';
,你正在写入无效内存。char
的大小1
,但*pnum = '9';
可能会修改比这更多的内存(int
通常有大小4
(。因此,如果为堆栈上的char
保留了 1 个字节的内存,那么它正在修改的其他三个字节是什么?
改用char*
指向char
:
int main() {
char num = 'A';
char* pnum = #
*pnum = '9';
std::cout << num << std::endl;
}