2013-02-16 3 views
-2

У меня есть два массива
после некоторых изменений во втором массиве я хочу иметь
первый массив такой же, как второй,
возможно не копировать весь массив один на один элемент
но каким-то образом одной командой сделать первый массив точкой для элементов
второй массив.два массива указывают на ту же самую информацию

+0

цыпленок ссылка: http://en.wikipedia.org/wiki/Object_copy Что вам нужно неполная копия, как показано на рисунке, HTTP://en.wikipedia.org/wiki/File:Shallow_copy_in_progress.svg используйте два указателя. – Deamonpog

+6

Это стихотворение? –

+5

-1 не хайку. –

ответ

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 это просто псевдоним для массива. Оба arr и r буквально ссылаются на объект массива.

+1

+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)); 
+0

-1: Я совершенно уверен, что вы неправильно поняли вопрос. –

+0

@LightnessRacesinOrbit Перечитав его пару раз, вы, вероятно, правы. –

+0

Сольсы, домашние животные! –