在VS C++中,我有一个简单的char变量声明和一个指向char的指针.
char mychar = 'c';
char *mypointer = &mychar;
Run Code Online (Sandbox Code Playgroud)
当使用cout打印mypointer的值时,我希望在控制台中出现像0038FEDC这样的8字符地址值.相反,我得到一些奇怪的结果,如:
c│■8,ck∙<,c;■8等...
输出指向char值的指针时为什么会出现这些奇怪的字符?
std::ostream,其中std::cout一个实例,有一个重载,operator<<它被视为char*指向以null结尾的字符串中的第一个字符的指针.
您传递的是一个单个字符的指针,而不是一个以空字符结尾的字符串.这会导致未定义的行为.
在实践中,可能发生的是通过将内存mychar作为一个数组开始处理char并迭代它来直到\0找到a 来打印出一个字符流.
如果要打印地址,可以将指针强制转换为不是char*:
std::cout << static_cast<void*>(mypointer) << std::endl;
Run Code Online (Sandbox Code Playgroud)