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

如何在C++中打印二维char数组中[x][y]元素的地址?

如何正确打印二维char数组中元素的地址

嘿,这个问题我太熟悉了——你遇到的是C++标准库对char*类型的特殊处理!

问题根源

当你用cout输出&arr[0][1]时,它的类型是char*。而std::ostream对char*有专门的重载:它会把这个指针当成字符串的起始地址,从该位置开始输出所有字符,直到遇到终止符'\0'。这就是为什么你看到的是"ello"而不是内存地址。

解决方案:强制转换为void*

要让cout输出地址而非字符串,你只需要把char*类型的指针强制转换为void*。因为std::ostream对void*的处理是直接输出内存地址的十六进制值,不会做字符串解析。

修改你的代码示例:

char arr[2][6] = { "hello", "foo" };
// 正确打印arr[0][1]的地址
cout << static_cast<void*>(&arr[0][1]) << endl;

如果你习惯用C风格的转换,也可以这么写(不过更推荐C++的static_cast,类型更安全):

cout << (void*)&arr[0][1] << endl;

另一种方法:使用printf

如果你不介意混用C标准库,printf的%p格式符专门用来输出指针地址,它不会对char*做特殊处理:

printf("%p\n", &arr[0][1]);

这样就能得到你预期的arr[0][1](也就是字符'e')的内存地址啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:06:25