Вкратце, иногда , имя массива в C "распадается" на указатель на первый элемент массива, и это вызывает у вас проблемы.
Когда вы пишете
response=origin;
Имя origin
в RHS "распадается" для типа Line *
и указывает на первый элемент массива origin
, тогда как response
имеет тип "array [6] of Line". Поскольку оба типа несовместимы (инициализация массива указателем не имеет смысла), это ошибка.
Теперь
*response=*origin;
не копирует всю память из origin
в response
. Как я упоминал выше и более подробно в приведенной выше ссылке, origin
указывает на первый элемент массива origin
в этом контексте, поэтому *origin
фактически является первым элементом массива. Поэтому *response=*origin;
просто копирует значение первого элемента массива origin
в первый элемент response
. Поскольку вы не присвоили значение response[1]
, оно содержит мусор.
Если вы хотите скопировать данные массива, вы можете сделать цикл:
size_t i;
for (i=0; i < 6; ++i)
response[i] = origin[i];
Или вы можете использовать memcpy()
:
memcpy(response, origin, sizeof response);
(Выше указано для C, Objective-C может иметь различия и другие способы делать то, что вы хотите сделать.)