Как определить размер массива в структуре из "внешнего" int, определенного во входных данных - PullRequest
0 голосов
/ 02 июля 2019

У меня есть структура с массивом в нем. Размер этого массива должен быть 3 * input_variable. Как определить внешнее число, умноженное на входное значение, которое я могу использовать в структуре для объявления длины массива?

Я попытался определить переменную h вне main как

extern h

затем присваивая его значение в main из входной переменной.

Я также пытался использовать (в итоге)

nt main(int argc, char** argv)
{
    int input_variable;
    std::cin << input_variable;

    int h = input_variable * 3;

    void some_function(); // function does some stuff
                          // with the structs

#ifndef ARRAY_SIZING
#define ARRAY_SIZING h
#endif

    return 0;
}

struct _struct_
{
    constexpr std::size_t b = ARRAY_SIZING;
    double* arr[b];
};

int some_function()
{
    // structs are used down here.

    return 0;
}

Мне бы хотелось иметь возможность распределять размер массива в структуре с помощью входного параметра. Спасибо.

1 Ответ

1 голос
/ 02 июля 2019

Hm.Простые C-массивы в C ++.В основном никогда не нужно.ОК, вы хотите взаимодействовать с библиотечной функцией.

Я предполагаю, что библиотека ожидает не массив, а указатель.А поскольку ваша структура содержит массив для указателя на double, я предполагаю, что lib хочет видеть double **.

Я с трудом могу себе представить, что старые библиотеки используют ссылки или указатели на массивы, что-то вроде:

void function (double* (&array)[10]); // Reference to array
void function (double* (*array)[10]); // Pointer to array

потому что и здесь вам нужен массив с размером, известным во время компиляции.

Я бы предпочел что-то вроде

void function (double** array, size_t size); // Pointer to Pointer to double

Итак, используйте std::vectorнапример:

std::vector<double *> arr(input_variable * 3);

И если вы хотите передать данные массивов в функции lib, используйте функцию векторов data.

function (arr.data());

Вы также можете создатьмассив с новыми.

Последний совет: не используйте необработанные указатели.

Я надеюсь, что смогу немного помочь.,,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...