У меня есть два массива
после некоторых изменений во втором массиве я хочу иметь
первый массив такой же, как второй,
возможно не копировать весь массив один на один элемент
но каким-то образом одной командой сделать первый массив точкой для элементов
второй массив.два массива указывают на ту же самую информацию
ответ
Нет, массив - это объект, а на объекте - некоторый регион хранения. Два массива - это две отдельные области хранения.
Однако, учитывая указатель на первый элемент массива, вы можете использовать его, чтобы индексировать массив так же, как вы бы с самого массива:
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 за усердие и точность –
Если вы хотите скопировать один элемент за раз, простенький цикл 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));
-1: Я совершенно уверен, что вы неправильно поняли вопрос. –
@LightnessRacesinOrbit Перечитав его пару раз, вы, вероятно, правы. –
Сольсы, домашние животные! –
цыпленок ссылка: http://en.wikipedia.org/wiki/Object_copy Что вам нужно неполная копия, как показано на рисунке, HTTP://en.wikipedia.org/wiki/File:Shallow_copy_in_progress.svg используйте два указателя. – Deamonpog
Это стихотворение? –
-1 не хайку. –