在VS C ++中,我有一个简单的char变量声明和一个指向char的指针。
char mychar = 'c';
char *mypointer = &mychar;
当使用cout打印mypointer的值时,我希望在控制台中出现像0038FEDC这样的8字符地址值。相反,我得到一些奇怪的结果,如:
c│■8,ck∙<,c;■8等...
为什么在输出指向char值的指针时会出现这些奇怪的字符?
答案 0 :(得分:5)
std::ostream
,std::cout
是一个实例,operator<<
有一个重载,它将char*
视为指向 null中第一个字符的指针终止字符串。
您传递的是一个单个字符的指针,而不是一个以空字符结尾的字符串。这会导致未定义的行为。
在实践中,可能发生的事情是,通过将内存从mychar
作为char
数组开始处理并迭代它,直到{{1},将打印出一个字符流。找到了。
如果您想打印地址,可以将指针投射到不是\0
的地方:
char*