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

为何char指针输出整个字符数组,int指针仅输出地址?如何打印两者地址?

C++中char指针与int指针cout输出差异及数组地址打印方法

为什么char指针输出整个数组,int指针仅输出地址?

  • std::cout对char*类型有专门的重载实现:它会将char*视为C风格字符串,从指针指向的内存位置开始逐个输出字符,直到遇到'\0'(空字符)才停止。你的chars数组用单个字符初始化,没有显式添加'\0',但刚好后续内存中存在'\0'(属于偶然情况),所以输出了整个数组的内容。这种写法其实存在未定义行为——如果后续内存没有'\0',cout会持续读取越界内存,直到找到'\0'为止。
  • 对于int*类型,std::cout没有专门的字符串处理重载,会直接输出指针存储的数值,也就是数组首元素的内存地址。

如何打印两个数组的地址?

要打印指针(或数组)的内存地址,需要将指针转换为void*类型——std::cout对void*的处理逻辑是输出其指向的内存地址。数组名本身就是指向首元素的指针,因此可以直接转换后输出。

修改后的代码示例:

#include <iostream>

using namespace std;

int main()
{
    char chars[] = {'a','b','g','j','z'};
    char *ptr1 = chars;
    // 打印char指针/数组的地址
    cout << static_cast<void*>(ptr1) << endl;
    cout << static_cast<void*>(chars) << endl; // 数组名直接转void*
    
    int arr[] = {1,2,3,4,5};
    int *ptr2 = arr;
    // 打印int指针/数组的地址
    cout << static_cast<void*>(ptr2) << endl;
    cout << static_cast<void*>(arr) << endl; // 数组名直接转void*

    return 0;
}

执行后会输出类似以下的地址(地址值取决于系统环境):

0x7ffd836e4350
0x7ffd836e4350
0x7ffd836e4360
0x7ffd836e4360

内容的提问来源于stack exchange,提问作者Rishabh Verma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:18:18