两个数组指向相同的信息

时间:2013-02-16 16:36:03

标签: c++ arrays pointers

我有两个阵列
经过第二阵列的一些变化我想要有 第一个数组与第二个相同,
是不是可以逐个复制整个数组 但不知何故,通过一个命令使第一个数组指向
的元素 第二阵列。

2 个答案:

答案 0 :(得分:6)

不,数组是对象,而对象是存储的某个区域。两个数组是两个独立的存储区域。

但是,给定指向数组第一个元素的指针,您可以使用它来索引数组,就像使用数组本身一样:

int arr[] = {1, 2, 3, 4, 5};
int* p = arr;
arr[2] == p[2];

但是,我不想加剧数组和指针以任何方式相似的错误观念。第一行定义了一个包含5 int s的数组对象。第二行定义了一个指向该数组中第一个元素的指针。

它们可以在最后一行中以相同的方式使用的原因是因为在进行索引之前,数组的名称arr被隐式转换为指向其第一个元素的指针。所以这两个子表达式确实是一回事。 arr[2]只需在应用索引运算符之前隐式转换为指针。

或者,您可以参考数组:

int arr[] = {1, 2, 3, 4, 5};
int (&r)[5] = arr;
arr[2] == r[2];

现在r只是数组的别名。 arrr都字面上引用了数组对象。

答案 1 :(得分:-1)

如果要一次复制一个元素,可以使用简单的for循环。如果要复制可以使用的所有元素,例如memcpy(如果,只有,如果您的数组具有POD类型)。

然后当然有std::copy

int array1[5] = { ... };
int array2[5];

// Copy from `array1` to `array2`
std::copy(std::begin(array1), std::end(array1), std::begin(array2));