提问者:小点点

打印字符指针与通过取消引用打印字符


char c = 'a';

char* p = &c;

cout << p << endl;

cout << *p << endl;

这是用C++语言编写的代码。

为什么在第一个cout语句中,程序尝试打印直到它找到一个空字符,而在第二个语句中,它只打印一个字符?


共1个答案

匿名用户

在C++中,指向char的指针通常被认为是“C字符串”(以NULL结尾的字符串或char)。

因此,在您的两次调用中,指针将为常量char*调用std::ostream运算符<<重载--它将其打印为以空结尾的字符串,而char版本将为字符调用std::ostream运算符<<重载。

如果要打印指针的地址,则需要首先将指针强制转换为void*:

std::cout << static_cast<void*>(p) << std::endl;