Значения Элементов Структуры Динамически

Тема в разделе "Общие вопросы по С и С++", создана пользователем Marty, 15 мар 2012.

  1. Marty

    Marty Гость

    Есть структура с большим количеством элементов (150-170 штук), как динамически присвоить значения элементам?
    уже пол-дня рою гугл, не могу найти. Видимо нужны какие-то дополнительные инструменты использовать. не могу разобраться помогите
     
  2. qqwertty

    qqwertty Гость

    А что это в вашем понимании значит?

    Ну если я предполагаю то, что вам нужно, то на С можно манипулировать адресами и заполнять структуру, не обращаясь по именам к полям. Но так делать не очень рекомендуется - перестроите структуру, все переписывать, ошибетесь в цифорке - ....... Не знаю что будет, но мало приятного. В С++ так ваще лучше никогда не делать, уже не помню с чем связано.

    ИМХО, проще реорганизовать вашу структуру. 170 полей - это слишком.
     
  3. Marty

    Marty Гость

    Вы можите написать код как реализовать "то на С можно манипулировать адресами и заполнять структуру, не обращаясь по именам к полям. "
    Спасибо
     
  4. qqwertty

    qqwertty Гость

    Код (C++):
    #include<stdio.h>
    #include<conio.h>

    struct Struct
    {
    int a1;
    int a2;
    double a3;
    };

    int main(void)
    {
    //можно так
    struct Struct A = {4,8,7.6};
    //а можно и так, но лучше не надо
    *(int *)&A = 10;
    //как ко второму полю обратиться я не помню, так как хаки не запоминаю, ибо это чаще только вредит
    printf("%d %d %lf\n", A.a1, A.a2, A.a3);
    return 0;
    }
    ДОБАВЛЕНО: Хотя нет) вспомнил: *(int *)((int)&A + 4) = 10;

    И еще: про выравнивание надо тоже не забывать, вобщем искренне не советую вторым способом пользоваться :)
     
  5. Marty

    Marty Гость

    так выходит только используя имя элемента (A.a1) можно к нему обратиться...а динамически перебрать все нельзя?

    Добавлено: понятно...*(int *)((int)&A + 4) = 10;....осталось теперь только разобраться с тем что такое 4 и 10)))
    Спасибо
     
Загрузка...

Поделиться этой страницей