就像标题所说的那样。我的印象是char与short short unsigned int
相同,允许从0到255的任何值。根据Visual Studio上的调试器,每当我声明char
时,它都从-52 'Í'
。为什么会这样,这怎么可能?
答案 0 :(得分:3)
在您签名的情况下,未指定char是已签名还是未签名,这在C99标准部分6.2.5
Types 草案中有所说明:
共有三种类型char,signed char和unsigned char 称为字符类型。实现应定义char to 具有与签名相同的范围,表示和行为 char或unsigned char.35)
未初始化的自动变量具有不确定的值,因此它们的初始值是不可预测的。
由于我们讨论的是Visual Studio,根据维基百科文章Magic number (programming),它会使用CC
标记单位化堆栈内存:
由Microsoft的C ++调试运行时库和许多DOS使用 用于标记未初始化堆栈内存的环境。 CC类似于 x86处理器上INT 3调试断点中断的操作码。
这将解释您所看到的-52
,但这不应被视为可靠且不可移植。应该注意的是,使用indeterminate值会调用未定义的行为。
答案 1 :(得分:3)
因为Visual Studio会在调试模式下将堆栈内存初始化为0xCC,所以0xCC是int 3(中断指令)的机器代码,0xCC是十进制的-52。