您正在调用 operator<< 重载,该重载将 null-terminated char* 字符串作为输入。但是您的数据不是以空值结尾的,这会导致undefined behavior。您在输出中看到了额外的垃圾,因为operator<< 正在打印grade 变量之后的周围内存,直到它遇到0x00 字节。但它可能很容易使您的代码崩溃,或损坏内存,或完成其他任何事情。这就是未定义行为的本质。
如果要打印指针指向的内存地址,请使用operator<< 重载,它采用void*:
int main()
{
char grade = 'A';
char *pGrade = &grade;
std::cout << static_cast<void*>(pGrade);
return 0;
}
如果您只希望自己打印 A,则使用采用单个 char 的 operator<< 重载:
int main()
{
char grade = 'A';
char *pGrade = &grade;
std::cout << *pGrade;
return 0;
}
或者,使用cout.write():
int main()
{
char grade = 'A';
char *pGrade = &grade;
std::cout.write(pGrade, 1);
return 0;
}
否则,空终止您的数据:
int main()
{
char grade[2] = {'A', '\0'};
char *pGrade = grade;
std::cout << pGrade;
return 0;
}