You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++字符指针cout输出为何显示字符串而非地址?

为什么cout << p输出的是字符串而不是指针地址?

这是个非常典型的C++流操作重载问题,我来给你掰扯清楚:

首先你得明白,C++的std::cout对char*类型做了特殊处理——当你把一个char*指针传给cout时,它不会输出指针本身的内存地址,而是默认把这个指针当成字符串的起始位置,从这里开始逐个输出字符,直到碰到字符串结束符'\0'才停下。

结合你的代码具体分析

先看你写的这段代码:

char str[] = "we are poor students";
cout << str << endl; 
char *p = str; 
while (*p != '\0') { 
    cout << p << endl; 
    p++; 
} 
return 0;
  • 一开始p指向str的第一个字符'w',所以cout << p会直接输出从'w'开始到'\0'的完整字符串;
  • 每次循环里p++会让指针向后移动一个字符的位置,下一次输出就从新的指针位置开始往后读,直到'\0',这就导致了你看到的那种逐段缩短的字符串输出结果。

要是想输出char*的实际地址怎么办?

如果你确实想看到指针的内存地址,只需要把char*强制转换成**无类型指针void***就行,因为cout对void*的处理是输出它的地址值:

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

把你代码里的cout << p换成上面这句,就能看到每次p的真实内存地址了。

额外补充:其他类型指针的表现

像int*、float*这类非字符指针,cout就会直接输出它们的内存地址,因为标准库没给这些类型做类似char*的特殊重载,只会按照指针的默认规则输出地址值。

内容的提问来源于stack exchange,提问作者JianYuan Kou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:48:27