Как (глубоко) скопировать массив в C? - PullRequest
3 голосов
/ 14 февраля 2011

Ссылаясь на http://www.devx.com/tips/Tip/13291,, он говорит, что я могу использовать memcpy с размером для копирования, определяемым sizeof(), но разве массив не указывает на указатель?

Другоечем перебирать массив, как я могу использовать memcpy для глубокого копирования массива?

Спасибо!

Ответы [ 3 ]

8 голосов
/ 14 февраля 2011

В связанном примере int weekly_hours[5][5]; выделяет место для 25 целых чисел. Дальнейшего косвенного обращения нет, поэтому вы можете безопасно использовать memcpy для дублирования его значений.

6 голосов
/ 14 февраля 2011

Распределен многомерный массив. Массив указателей (указателей ...) - это разные вещи (и каждый вложенный указатель должен быть выделен / скопирован / освобожден самостоятельно).

Не смущайте тот факт, что одномерный массив и один указатель могут использоваться взаимозаменяемо в большинстве ситуаций, потому что они технически не совпадают.

4 голосов
/ 14 февраля 2011

Надеюсь, что вы сможете решить некоторые проблемы:

  • Массив - это выделенный фрагмент, соседние ячейки памяти.
  • Имя переменной массива может преобразовывать ("распад") в указатель на первый элемент массива, но не наоборот. Это делается неявно каждый раз, когда вы используете имя переменной массива в арифметике указателей.
  • Вы можете использовать оператор sizeof () для имени переменной любого статически распределенного массива, чтобы получить число байтов в массиве. Если sizeof () используется для статически размещенного многомерного массива, то же самое применимо.
  • Если вы используете оператор sizeof () на указатель, вы получите размер указатель (то есть 4 байта на 32-битном машина).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...