что хранится в переменной ))) или копирование структур

Vладимир
Offline
Зарегистрирован: 27.01.2015

Всем привет

есть массив где каждый елемент это структура
struct S_leditem
{
byte ledmaskcount;
byte ledmask[10];
int time;
};

struct S_leds
{
byte scriptcount;
byte startscript;
S_leditem leditem[10];
} leds;

S_leditem currentleditem;

что будет в переменной currentleditem после выполнения строки
currentleditem=leds.leditem[n];
отдельный экземпляр leds.leditem[n] или обе переменных будут указывать на одно и тоже адресное пространство

Vладимир
Offline
Зарегистрирован: 27.01.2015

к сожалению среда разработки мне сечас не доступна , сори за возможные косяки в коде .

step962
Offline
Зарегистрирован: 23.05.2011

Для компилятора оператор

currentleditem=leds.leditem[n];

равносилен

memcpy(currentleditem,leds.leditem[n],sizeof(currentleditem));

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Там будет КОПИЯ.

Другой вариант - использовать указатели.

S_leditem *curentItem_ptr = &leds.ledItem[n];
...
// Пример использования
Serial..println(currentItem_ptr->time);
...

в этом случае копии не будет, будет указатель на структуру S_leditem. Думаю Вы понимаете, что копия - это лишнее время на копирование, а самое главное - лишнее место в памяти.

Разумеется указатель - это всегда риск, что он может иметь значение NULL (кстати, всегда при описании инициализируйте указатель значением nullptr или NULL, либо указателем на структуру). В остальном использовать его не сложно.

 

Vладимир
Offline
Зарегистрирован: 27.01.2015

В моем случае нужна копия

 так как currentleditem дан на растерзание пользователю при этом нужна возможность отката к предустановкам

-------------------

респект за быстрые и исчерпыващие ответы