如何在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
相关产品推荐
相关产品推荐

