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

C++中数组与指针:解析数组地址含义及代码输出疑问

数组地址与C++ cout输出解析

先看你给出的代码:

char d[] {"Ashish"};

std::cout << d << std::endl;
std::cout << &d << std::endl;
std::cout << &d[0] << std::endl;
std::cout << (void*)&d[0] << std::endl;

各语句输出说明

  • 第一条语句:输出字符串 Ashish。C++中char数组名d会隐式转换为指向首元素的char*指针,cout对char*的默认行为是输出从该地址开始的连续字符,直到遇到字符串结束符\0("Ashish"会自动在末尾添加这个结束符)。
  • 第二条语句:输出数组d的起始内存地址(十六进制格式,例如0x7ffeefbff5a0)。&d是指向整个数组的指针,类型为char(*)[7](数组包含6个可见字符加1个结束符,共7个元素),cout处理这类非char*的指针时,会自动转换为void*并输出地址值。
  • 第三条语句:输出字符串 Ashish。&d[0]是数组首元素的地址,类型为char*,和第一条语句的逻辑一致,cout会解析并输出对应字符串。
  • 第四条语句:输出数组首元素的起始内存地址(十六进制格式,和第二条语句的输出值完全相同)。这里通过(void*)将char*类型的&d[0]强制转换为void*,cout对void*的处理是直接输出地址值,而非解析字符串。

第二条与第四条输出相同的原因

数组的起始地址和它的首元素地址在内存中是同一个位置:数组是连续存储的元素集合,数组本身的地址就是其第一个元素的地址。

  • &d作为指向整个数组的指针,它的数值就是数组的起始地址;
  • (void*)&d[0]是首元素地址转换为void*后的结果,数值同样是数组的起始地址。
    两者指向的内存位置完全重合,因此cout输出的地址值完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:57:21