Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Как всегда есть несколько способов(+)

Отправлено Quasy 01 ноября 2007 г. 10:18
В ответ на: A как в С присвоить a[] = b[]; с перекопированием ? отправлено <font color=gray>VasilyS</font> 01 ноября 2007 г. 08:54


1 - сделать на асме.
2 - memcpy
3 - имхо самый изящный:
Да, содержимое массивов в Си не перебрасывается, но содержимое СТРУКТУР копируется при присваивании, да еще в полтора раза быстрее чем memcpy (по кр. мере в ИАР AVR и ARM).
//////////////
Поэтому первым делом одеваю массив в оболочку структуры...
typedef struct
{
int ai[5];
}array_of_int_5;

// Организую две структуры в роли двух массивов.
//Одну из них инициализую.
array_of_int_5 a, b = { 1, 2, 3, 4, 5 };
//////////////////
main
{
b.ai[1] += 4;
a = b; // хееерак - и скопировали! 103 cycles
printf("%d\n",a.ai[1]); // Печатается 6
}//main

//////////////////
А вот способ копирования массивов как областей памяти через memcpy.
#include
int ia[5], ib[5]={ 1, 2, 3, 4, 5 };
main
{
ib[1] += 2;
memcpy(ia, ib, sizeof(ib) ); // 146 cycles
printf("%d\n",ia[1]); // Печатается 4
}



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 90:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru