|
Перебрать все члены структуры |
|
|
|
May 25 2015, 07:09
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
я могу перебрать в итерации все члены массива. Код for (i=0; i < sizeof(array); i++) { array[i] =i; } а можно сделать что то подобное со структурой или объединением?
Сообщение отредактировал Jenya7 - May 25 2015, 07:09
|
|
|
|
|
May 25 2015, 07:54
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Jenya7 @ May 25 2015, 10:09)  я могу перебрать в итерации все члены массива. Код for (i=0; i < sizeof(array); i++) { array[i] =i; } sizeof даст вам размер массива в байтах, а не количество членов. А что можно сделать одинакового с членами структуры?
|
|
|
|
|
May 25 2015, 09:03
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(jcxz @ May 25 2015, 13:59)  А что Вы хотите выиграть? Что такое "указатель на член структуры" знаете? дайте пример. Цитата(ViKo @ May 25 2015, 12:54)  sizeof даст вам размер массива в байтах, а не количество членов. А что можно сделать одинакового с членами структуры? член структуры можно проанализировать и в соответствии кто он принять решение.
|
|
|
|
|
May 25 2015, 10:45
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(ViKo @ May 25 2015, 14:54)  А как вы узнаете, какой это член? Работайте с каждым членом отдельной функцией. Или целиком со всей структурой, по элементам. отдельной функцией, куча функций надо писать. хочется кратко и элегантно. ну к примеру Код typedef union { void (*fp1p)(void); void (*fp2p)(uint32_t); void (*fp3p)(uint32_t, uint32_t); void (*fp4p)(uint32_t, uint32_t, uint32_t); uint32_t (*fp5p)(uint32_t); uint32_t (*fp6p)(uint32_t, uint32_t); uint32_t (*fp7p)(uint32_t, uint32_t, uint32_t); } fp;
struct command { char *name; //command name uint32_t minargs; uint32_t maxargs; int minval; int maxval; fp read_func_pointer; fp write_func_pointer; }; если бы я мог написать Код if(arg_count == 0) { uint32_t ret_val = commands[0].read_func_pointer[i]; } else { commands[0]. write_func_pointer[j]; } было бы проще жить.
|
|
|
|
|
May 25 2015, 14:32
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (Jenya7 @ May 25 2015, 16:49)  так как мне выбрать член из юниона? Вы попробуйте для начала ПОНЯТЬ, что такое union. А там, глядишь, и поймете, что перебирать-то и нечего. Дальше уже сможете рассказать, что хотите сделать.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 25 2015, 14:54
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(zltigo @ May 25 2015, 19:32)  Вы попробуйте для начала ПОНЯТЬ, что такое union. А там, глядишь, и поймете, что перебирать-то и нечего. Дальше уже сможете рассказать, что хотите сделать. да я уже написал что хочу сделать. Код if(arg_count == 0) { uint32_t ret_val = commands[0].read_func_pointer[i](arg1); } else { commands[0]. write_func_pointer[j](arg1, arg2); }
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|