Столкнулся с такой ситуацией, что стало мне нужно в массив закинуть адреса полей структуры.Но что-то ничего не выходит, да и в сети не нашел ответа...Есть ли такая возможность в си?[/uquote]
В таких случаях лучше использовать указатели на члены структуры, а не просто указатели на uint8_t. Так:
Код: Выделить всё
struct Mytyp {
u8 a, b, c;
};
static u8 Mytyp:: * const ttz[] = {&Mytyp::a, &Mytyp::b, &Mytyp::c};Код: Выделить всё
uint Func(Mytyp const *p)
{
static u8 cnt = sizeof(ttz) / sizeof(ttz[0]);
int i;
if ((i = cnt - 1) < 0) i = sizeof(ttz) / sizeof(ttz[0]) - 1;
cnt = i;
return p->*ttz[i];
}Правда указатели на члены имеют размерность равную указателям и в случаях маленьких структур экономнее (по флеши) может быть просто хранить смещения к членам структуры и когда нужно - приводить тип.
PS: И ещё - в таких случаях как у вас (массив констант), нужно всё-таки использовать квалификатор const для массива указателей. Чтоб не тратить понапрасну ОЗУ.


