реклама на сайте
подробности

 
 
> указатель структур в структуре
sergey sva
сообщение Mar 5 2011, 07:00
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Подскажите как сделать:
Структура в ней разнотипные структуры, их нужно перебрать в цикле и записать в массив.

примерно такое:
Код
typedef struct{
int x;
char v;
}strca;

typedef struct{
long x;
char v;
}strcb;

typedef struct{
long x;
float v;
}strcc;


struct as {
strca a;
strcb b;
strcc c;
};


for(int i = 0; i < MAXCOUNTSTRUC; i++ ){
long adrr[MAXCOUNTSTRUC];

adrr[i] = (void(*))as;

(void(*))as++;


}//for

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergey sva
сообщение Mar 5 2011, 09:29
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Цитата
Это как так?

Например в код понадобится добавить подструктуру, добавляем и добавляем в макрос MAXCOUNTSTRUC х +1
больше изменений в коде не нужно делать. Будет что то вроде библиотеки с типами.

Цитата
Вот именно, как?
Ваша структра as имеет вполне определенное число подструктрур:3.
Где тут неизвестное, где тут переменная?
В вашем примере, где все структуры содержат разнотипные данные и никаких указателей и информации о длинах, никакой цикл не сгодится, ручками в массив заносите.
Либо расшифруйте задачу


Указатели длины можно добавить там код просто что бы мысль показать

Сообщение отредактировал sergey sva - Mar 5 2011, 09:32
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 5 2011, 09:35
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(sergey sva @ Mar 5 2011, 12:29) *
Например в код понадобится добавить подструктуру, добавляем и добавляем в макрос MAXCOUNTSTRUC х +1
больше изменений в коде не нужно делать. Будет что то вроде библиотеки с типами.

Мутно как-то...
И что мешает вашему макросу точно так же добавить в нужном месте указатель на нужную структуру?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 6 2011, 12:00
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(MrYuran @ Mar 5 2011, 13:35) *
И что мешает вашему макросу ...?

Да, в макросизации нужно идти до конца!
Я не знаю, что именно хочет автор, но сам делаю что-то подобное присвоением типам структур условных номеров через enum, ну и конечно же есть тяжелое место в коде - по условному номеру структуры выполнить требуемые действия - "жосткий" switch, не красящий код (см ниже). Врагу не пожелаешь sm.gif

Код
char GetRecordParametersError(uchar area, uchar index)
{    switch (area)
    {
#define BACKUP_AREA(type_name,var_name,qty_name, mask,show_name) case type_name:        \
                record_parameters.eeprom_offset=OFFSET(EEPROM_TYPE,var_name[index]);    \
                record_parameters.bytes_qty=sizeof(type_name##_TYPE);                    \
                record_parameters.ram_address=(uchar *) &var_name;                        \
                record_parameters.checksum_address=&var_name.checksum;                    \
                break;
#include "k__areas.h"
#undef BACKUP_AREA
        default:    return WRONG_AREA;
    }
    if (index>area_qty[area]-1) return WRONG_AREA_INDEX;
    else return 0;
}



--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 8 2011, 00:54
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Dog Pawlowa @ Mar 6 2011, 14:00) *
Врагу не пожелаешь sm.gif

Ох и хороша же травка sm.gif задвинуто-то как! sm.gif
точно подмечено, врагу не пожелаешь такого.

Код
switch(area)
{
  case type_name

Тут наверно не type_name, а все же area_id надо бы.

А зачем всё это, можно полюбопытствовать?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 9 2011, 07:52
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(defunct @ Mar 8 2011, 03:54) *
А зачем всё это, можно полюбопытствовать?

Да банально все - размещение данных в EEPROM

Код
//     EEPROM areas
//               type_name            var_name              qty        mask                     name           
    BACKUP_AREA (SETUP,                 se,                   2,        SETUP_MASK,            "Setup  "    )
    BACKUP_AREA (STATISTIC,             stat,              1,        STATISTIC_MASK,        "Statis "    )      
....


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sergey sva   указатель структур в структуре   Mar 5 2011, 07:00
- - _Pasha   Нужно добавить информацию о размере подструктуры.   Mar 5 2011, 08:42
- - zltigo   Ничего не понял в этом желании в чем-то вывихнутьс...   Mar 5 2011, 08:43
- - kamil yaminov   структурки-то разных размеров!   Mar 5 2011, 09:00
- - sergey sva   ЦитатаНичего не понял в этом желании в чем-то выви...   Mar 5 2011, 09:00
|- - MrYuran   Цитата(sergey sva @ Mar 5 2011, 12:00) Же...   Mar 5 2011, 09:14
- - zltigo   В структуре не хранятся ни размеры элементов струк...   Mar 5 2011, 09:16
- - V_G   Вот именно, как? Ваша структра as имеет вполне опр...   Mar 5 2011, 09:27
- - sergey sva   Цитата(MrYuran @ Mar 5 2011, 12:35) Мутно...   Mar 5 2011, 09:48
|- - _Pasha   Цитата(sergey sva @ Mar 5 2011, 13:48) Мо...   Mar 5 2011, 10:08
|- - Палыч   Вот так нужно сделать? Кодstruct as S; memcpy...   Mar 5 2011, 11:56
- - sergey sva   Нашел решение помогли .   Mar 9 2011, 07:16


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 03:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01402 секунд с 7
ELECTRONIX ©2004-2016