C++ 如何打印字符的指针

C++ 如何打印字符的指针,c++,pointers,C++,Pointers,使用此代码时: intmain() { 字符等级='A'; char*pGrade=&grade; std::cout您有一个正确的指针。但是,在C中,char*始终被假定为以零结尾的字符串。因此,cout格式化程序将从下一个零字节开始打印所有内容。注意开头的“a”吗 如果出于某种原因希望查看指针的数值,则必须将其转换为(uint64_t),并且可能需要以十六进制打印: std::cout << std::hex << (uint64_t)pGrade <&

使用此代码时:

intmain()
{
字符等级='A';
char*pGrade=&grade;

std::cout您有一个正确的指针。但是,在C中,
char*
始终被假定为以零结尾的字符串。因此,
cout
格式化程序将从下一个零字节开始打印所有内容。注意开头的“a”吗

如果出于某种原因希望查看指针的数值,则必须将其转换为(uint64_t),并且可能需要以十六进制打印:

    std::cout << std::hex << (uint64_t)pGrade << "\n";

std::cout输出指针地址的另一个选项是使用to
std::uintptptr\u t
,例如

#包括
int main(){
字符等级='A';
char*pGrade=&grade;

std::cout您应该将其打印为
void*
,这只是一个通用指针。
std::cout
假设
char*
是以空结尾的字符串,因此如果您打印指向字符而不是字符串的指针,它将一直打印到空字节。通过使用
void*
,您可以确保我们不会感到困惑

charc='A';

std::cout您正在调用
运算符。您希望得到什么结果?很抱歉用一种不相关的语言结束。原理是一样的。无需强制转换
*pGrade
,它已经是一个
字符了。啊,很好。谢谢。
std::cout << *pGrade << '\n';
0x7ffcf2013567
int main()
{
    char grade = 'A';
    char *pGrade = &grade;
    std::cout << static_cast<void*>(pGrade);
    return 0;
}