在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)