当前位置: 首页 > 知识库问答 >
问题:

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

太叔俊侠
2023-03-14
char c = 'a';

char* p = &c;

cout << p << endl;

cout << *p << endl;

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

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

共有1个答案

白博赡
2023-03-14

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

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

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

std::cout << static_cast<void*>(p) << std::endl;
 类似资料:
  • 问题内容: 如何在一行中多次打印一个字符?这意味着我不能使用循环。 我正在尝试多次打印。 我尝试了这种方法,但是不起作用: 是变量。 问题答案: 您可以在同一行中进行打印,因此 可以 使用循环。而不是不添加换行符。 将打印:。

  • 我有一个数据库,它存储带有Unicode字符的视频游戏名称,但我不知道如何在将这些Unicode字符打印到超文本标记语言响应时正确转义它们。 例如,当我打印所有名为Uncharted的游戏时,我会得到以下信息: 但它应该显示以下内容: 我运行了一个快速的JavaScript转义函数,查看哪个Unicode字符™并发现它是。 如果我能得到字符以正确显示。我的猜测是以某种方式找到字符串中每个字符的十六

  • 我正在学习汇编,当然我正在尝试经典的0x10 bios中断。我看过的资源显示使用打印字符串,因此为了理解操作码,我试图模仿它的行为。这适用于,但不适用于我拥有的。我做错了什么?:

  • 问题内容: http://play.golang.org/p/joEmjQdMaS 这样会打印一个内存地址 有没有办法打印它: 这主要是出于调试目的,如果我有一个带有30个指针字段的结构,我不想为30个字段中的每一个都执行一个println来查看其中的内容。 问题答案: 有一个很棒的软件包,称为go-spew。正是您想要的。 将为您提供以下输出:

  • #include <stdio.h> #include <wchar.h> int main(void) { char str1[] = "abcd"; wchar_t str2[] = L"abcd"; return 0; } 技巧 用gdb调试程序时,可以使用“x/s”命令打印ASCII字符串。以上面程序为例: Temporary brea

  • 问题内容: 打印列表中元素之前的“ u”?我没有在代码中键入u。 当我运行此命令时,它将打印列表,但其格式如下: 那些“ u”来自列表中每个元素的位置? 问题答案: 我认为您实际上对此感到惊讶的是,打印单个字符串与打印字符串列表的功能不同–无论是否为Unicode,这都是事实: 即使没有,您也有多余的引号,更不用说反斜杠转义了。而且,如果您使用字节字符串而不是字符串尝试相同的操作,那么您仍然会使用