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输出指针地址的另一个选项是使用tostd::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;
}