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

C++中数组元素与原对象内存地址不一致的原因探究

问题解答:数组中对象地址与原对象不一致的原因

核心原因是你创建数组时执行的是对象拷贝操作,而非直接引用原对象。

当你编写Student students[] = {a1, a2, a3};时,C++会为数组单独分配一块新的内存空间,随后将a1、a2、a3的对象内容分别复制到数组的对应元素位置中。也就是说,students[0]是a1的一个副本,二者并非同一个对象,内存地址自然不同。

验证拷贝行为的方法

你可以给Student类添加一个拷贝构造函数,并在其中打印日志,就能直观看到拷贝过程:

Student(const Student& other) {
    this->age = other.age;
    this->name = other.name;
    cout << "拷贝构造函数被调用" << endl;
}

运行代码后会发现,数组初始化阶段会三次调用该拷贝构造函数,对应三个原对象的拷贝操作。

让数组元素关联原对象的方法

如果希望数组中的元素与原对象是同一个实例,你需要创建指针数组,而非对象数组:

Student* students[] = {&a1, &a2, &a3};

此时students[0]存储的是a1的内存地址,&(*students[0])的结果会与&a1完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:12:35