Начальная инициализация "динамических" структур. как обычно это делается?

Тема в разделе "Флудилка", создана пользователем Igor68, 19 янв 2022.

  1. b707

    b707 Гуру

    ну так делайте как хотите, зачем тогда спрашивать? :)
    Я не вижу, чем это уточнение не согласуется с моим ответом.
    Во всех предложенных вариантах функции вполне смогут обращаться к массивам как элементам структуры.
     
  2. b707

    b707 Гуру

    Вы, по-моему, спрашивали. "как обычно делают".?
    Так вот, создавать отдельно массивы и отдельно структуры со ссылками на них имеет смысл только тогда. когда число массивов не равно числу структур (например, есть один общий массив. а все структуры ссылаются на него).
    Если же у вас для каждого экземпляра структуры свой массив - то отдельно такое никто не создает, тогда пишет особый метод - конструктор, который одновременно создают структуру и динамический массив, указатель на который присвается члену структуры.
     
  3. b707

    b707 Гуру

    пример структуры с динамическим массивом и конструктором
    Код (C++):
    //структура 0
    typedef struct {
        int32_t   cnums;       //количество входов
        float    * in;       // указатель на массив
     
        ELEMENT (int32_t nums) {     // конструктор с созданием массива размером nums
          this->cnums = nums;
          this->in = (float*)malloc(nums*sizeof(float));
    }
    } ELEMENT;
     
    Igor68 нравится это.
  4. Igor68

    Igor68 Гуру

    Что говорить! Такого не делал. Попробую. Спасибо!!!!!
     
  5. Igor68

    Igor68 Гуру

    добавление к
    Но такое по моему есть в http://forum.amperka.ru/attachments/devcpp_4-pdf.24668/?temp_hash=f47c58097744235aa6bf0d95f781e310
     
  6. b707

    b707 Гуру

    Может и есть, это ж стандартная конструкция языка.
    Хотя эта книжка вообще не об этом :)
     
  7. Igor68

    Igor68 Гуру

    Вопрос не решил пока, но по ходу стал курить и make:
    вот рабочий набросок Makefile:
    Код (Text):
    CC    := gcc
    LD    := gcc
    CFLAGS    := -c -Wall -v
    LDFLAGS    := -lm

    INC    := -I$(PWD)/neuro
    .DEFAULT_GOAL    := warn            #если "make" без параметра

    # ---- test1 - тестовая программа при разработке ----
    # тест формирования структур
    CFLAGS    :=-c -Wall
    Test1OBJ    =     out/test1.o \
                out/neuro.o \
                out/activate.o
    test1: $(Test1OBJ)
        $(LD) $(LDFLAGS) $(Test1OBJ) -o out/test1

    #--- testshm - тестовая программа доступа к разделяемой памяти ---
    TestShmOBJ        =     out/testshm.o
    testshm: $(TestShm)
        $(LD) $(LDFLAGS) $(TestShm) -o out/testshm
    #-- testfctivate - тестовая программа проверки функции активации ---
    TestFActivateOBJ    =    out/testfactivate.o \
                    out/activate.o
    testfactivate: $(TestFActivateOBJ)
        $(LD) $(LDFLAGS) $(TestFActivateOBJ) -o out/testfactivate
        @rm -rf out/*o
        @cp scripts/testfactivate.sh  out/testfactivate.sh
        @chmod +x out/testfactivate.sh
    #---------------------------
    out/testfactivate.o:
        $(CC) $(CFLAGS) $(INC) test/testfactivate.c -o out/testfactivate.o
    out/testshm.o:
        $(CC) $(CFLAGS) $(INC) test/testshm.c -o out/testshm.o
    out/test1.o:
        $(CC) $(CFLAGS) $(INC) test/test1.c -o out/test1.o
    out/neuro.o:
        $(CC) $(CFLAGS) $(INC) neuro/neuro.c -o out/neuro.o
    out/activate.o:
        $(CC) $(CFLAGS) $(INC) neuro/activate.c -o out/activate.o

    # очистка
    clean:
        rm -rf out/*o
        rm -rf out/test1
        rm -rf out/testshm
        rm -rf out/testfactivate

    #полная очистка
    fclean:
        rm -rf out/*

    # подсказка
    help:
        @echo "*************************************************************"
        @echo "help          - текущая подсказка"
        @echo "testfactivate - проверка функции(й) активации"
        @echo "testshm       - проверка доступа к разделяемой памяти"
        @echo "test1         - сборка теста"
        @echo "*************************************************************"

    # запуск без параметров
    warn:
        @echo "воспользуйтесь параметром \"help\" для информации (введите \"make help\")"