为什么C++代码运行后输出结果为0x7ffffcf9a010?
为什么这段C++代码输出的是内存地址0x7ffffcf9a010?
嘿,我来给你掰扯清楚为啥这段代码输出的是个内存地址哈~
先看你写的这段代码:
#include <iostream> #include <string> using namespace std; int main() { string cars[4] = {"Volvo", "BMW", "Ford", "Mazda"}; cars[0] = "Opel"; cout << cars; return 0; }
核心问题出在cout << cars;这一行:
- 在C++里,数组名在绝大多数场景下会隐式转换成指向数组第一个元素的指针。这里的
cars是string类型的数组,所以它会被转换成string*类型的指针,指向数组里第一个元素(也就是修改后的"Opel")的内存位置。 - 而
cout对于非char*类型的指针,默认行为就是输出指针本身存储的内存地址——也就是你看到的0x7ffffcf9a010(这个地址每次运行可能会变,因为栈内存的分配位置不是固定的)。
如果想输出数组里的所有字符串内容,得遍历数组才行,比如用范围for循环:
#include <iostream> #include <string> using namespace std; int main() { string cars[4] = {"Volvo", "BMW", "Ford", "Mazda"}; cars[0] = "Opel"; // 遍历数组输出每个元素 for (const auto& car : cars) { cout << car << " "; } return 0; }
这样运行后就会输出:Opel BMW Ford Mazda。
内容的提问来源于stack exchange,提问作者PixelCraftDev
相关产品推荐
相关产品推荐

