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

标签 c++ arrays pointers

我正在寻找某人来纠正我对指针和数组的理解。
假设我有两个数组:

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 循环创建了数组的拷贝?虽然这对我来说听起来不对。

最佳答案

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

int* array = new int[10];
正在 build 一排 10 栋房屋(new int[10]),然后写下这些房屋的位置并将地址存储在 array 中.
array是一个数组是一个会让你感到困惑的问题。将房子的地址误认为是房子。一张纸说123 road street不是我的房子,即使它唯一地命名了我的房子。
将 map 误认为领土真的很容易,并导致困惑。你必须做一些工作来解开它。array1=array2正在拿纸array1并在上面写下第二栋房屋的地址。它对房屋没有任何作用。他们仍然在那里——但你可能不再有他们在哪里的记录。所以现在它们将被遗弃和丢失(这称为内存泄漏)。array1[0] = array2[0]拿着一张叫做array2的纸,走到上面列出的地址,看看那里的第一所房子(又名0)。然后它拿出扫描仪扫描整个房子。
然后你走到现场array1说有一排房子。你去第一间房子(又名 0),然后拿出你的扫描仪。你将开关从扫描切换到打印,然后瞄准房子。
它继续摧毁那里的房子,并在 array2 命名的 block 上打印你扫描过的房子的拷贝。 .
然后你走回由 array2 命名的街区。 , 扫描 array2[1]街区的第二个房子,走回去打印array1[1]第一个街区的第二个房子。
这是一个非常非常不同的操作,而不是在一张纸上划出 block 的地址并替换它。
现在,&array1[0]将前往 array1 命名的区 block , 去第一家[0] ,然后读取写在上面的地址(&)。当我们用第一所房子的地址命名街区时,结果证明这与我们在 array1 中写下的内容相符。本身。array1[1]将有一个不同的地址 -- &array1[0] -- 但它会在 array1[0] 的隔壁.

关于C++:array1 = array2 vs使用循环将array2的值分配给array1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64447931/

相关文章:

python - 删除数组的维度?

objective-c - 在方法中,指针或实际对象是否作为参数传递?

c++ - 使用 WriteProcessMemory 和指针写入另一个进程的内存

java - 如何在Android中使用.so文件

c++ - 使用 t( *this ) 会导致 RuntimeError,而 t( std::ref( *this ) 不会

c++ - 抽象类接口(interface)是否可以模板化

C char* 指针指向它们绝对不应该指向的相同位置

c++ - 我如何使用某种二进制签名识别 WinRAR SFX?

C++ 气泡数组赋值 - 添加标记以显示变化

C 从函数返回字符数组