指向char地址的指针的值

1 c++ pointers

在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值的指针时为什么会出现这些奇怪的字符?

jua*_*nza 5

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)