Многомерный массив в C - это плоский блок памяти без внутренней структуры. Макет памяти многомерного массива точно такой же, как у 1-мерного массива того же общего размера. Многомерный интерфейс реализуется посредством простого пересчета индексов. Вы всегда можете указать memcpy
весь многомерный массив точно так же, как вы это делаете в своем коде.
Это, конечно, относится только к встроенным многомерным массивам, явно объявленным как таковым (как в примере кода). Если вы реализуете многомерный массив вручную как массив указателей на подматрицы, эта структура данных не будет скопирована одним выстрелом с memcpy
.
Однако, по-видимому, у вас есть некоторые заблуждения относительно того, как работает memset
. Ваш memset(&array1,1,sizeof(array1));
не заполнит массив 1
s, что означает, что ваш код не должен печатать 1
независимо от того, какой массив вы печатаете. memset
интерпретирует целевую память как массив char
s, а не как массив int
s.
memset
может использоваться для установки памяти на ноль. Что касается ненулевых значений, то memset
обычно непригоден для инициализации массивов любого типа, кроме char
.
Зачем вам нужно что-либо учитывать?'array1' и' array2' имеют один и тот же тип, поэтому должно быть возможно присвоить значения, скопировав базовое представление. –
Предположим, вы хотели скопировать что-то другое. Как массив char * или большой буфер символов, где элементы разделены на \ 0. Говоря так, это кажется очевидным, но это из реального мира. – Johannes