C ++:array1 = array2 vs使用循环将array2的值分配给array1

Posted

技术标签:

【中文标题】C ++:array1 = array2 vs使用循环将array2的值分配给array1【英文标题】:C++: array1 = array2 vs using a loop to assign values of array2 to array1 【发布时间】:2020-10-20 15:02:33 【问题描述】:

我正在找人来纠正我对指针和数组的理解。

假设我有两个数组:

int* array1 = new int[10];
int* array2 = new int[10] 1,2,3,4,5,6,7,8,9,10 ;

当我执行array1 = array2 时,我得到以下地址值:

array1: 0000027964C831D0
array2: 0000027964C831D0
&array1[0]: 0000027964C831D0
&array2[0]: 0000027964C831D0

当我for (size_t i = 0; i < 10; i++) array1[i] = array2[i]; 时,我得到:

array1: 0000027964C832B0
array2: 0000027964C83710
&array1[0]: 0000027964C832B0
&array2[0]: 0000027964C83710

第一种情况(非循环)对我来说很有意义。我将 array2 中的数组地址分配给 array1,所以现在我有两个不同的指针指向同一个数组(或更具体地说,array2[0]),因此 &array1[0] 和 &array2[0] 是相同的。

但是对于第二种情况(循环),指针具有不同的地址。我是否正确地说 for 循环创建了数组的副本?虽然这对我来说听起来不对。

【问题讨论】:

循环将值从一个数组复制到另一个。您已经有 2 个数组开始(由于 new int[10]; 初始化) @UnholySheep 感谢您的评论。这就是我当时的理解。在第一种情况下,array1 指向 array2,如果我在执行 array1 = array2 之前不删除,则会出现内存泄漏。对于第二种情况,array2 的所有值都被复制到 array1。所以即使我在循环之前不删除也没有内存泄漏? 在第一种情况下,array1array2 是指针。在第二种情况下,您正在积极按价值复制。编辑:删除了“基本上”的不必要用法 @Aditya 不仅“本质上”——它们指针。 @molbdnilo 不必要的用词对我来说是个坏习惯……我的坏习惯哈哈 【参考方案1】:

指针是地址。把它们想象成一张写有家庭地址的纸。

int* array = new int[10];

正在建造一排 10 栋房屋 (new int[10]),然后记下这些房屋的位置并将地址存储在 array

array 是一个数组是一个会让你感到困惑的问题。将房子的地址误认为是房子。一张写着123 road street 的纸不是我的房子,即使它唯一地命名了我的房子。

把地图误认为是领土真的很容易,而且会导致混乱。你必须做一些工作来解开它。

array1=array2 拿着纸array1 并在上面写下第二栋房屋的地址。它对房屋没有任何作用。他们仍然在那里——但你可能不再有他们在哪里的记录。所以现在它们将被遗弃和丢失(这称为内存泄漏)。

array1[0] = array2[0] 拿着一张名为array2 的纸,走到上面列出的地址,然后看着那里的第一所房子(又名0)。然后它拿出扫描仪扫描整个房子。

然后你走到array1 说有一排房子的地方。你去第一所房子(又名0),然后拿出你的扫描仪。你将开关从扫描切换到打印,然后瞄准房子。

它继续摧毁那里的房子,并在array2命名的块上打印你扫描过的房子的副本。

然后你走回以array2命名的街区,扫描array2[1]街区的第二个房子,然后走回去打印array1[1]第一个街区的第二个房子。

这与在一张纸上划出块的地址并替换它是非常非常不同的操作。

现在,&array1[0] 要去array1 命名的街区,去第一个房子[0],然后读取上面写的地址(&)。当我们用第一所房子的地址命名街区时,结果证明这与我们在array1 中写下的内容相匹配。

array1[1] 将有一个不同的地址——&array1[0]——但它会在array1[0] 的隔壁。

【讨论】:

以上是关于C ++:array1 = array2 vs使用循环将array2的值分配给array1的主要内容,如果未能解决你的问题,请参考以下文章

C 中的 std::copy 等价物

C语言比较两个数组,从末未开始直至其中一个数组结束,比较两个数组有几个元素是一样的

c语言 动态数组 输入输出不一致,问题出在哪?

试验使用t检验

类似对象的数组的 C/C++ 分配

关于JSONObject,JSONArray的使用