简体   繁体   中英

How to define array size in a struct from an “external” int defined in input

I have a struct with an array in it. The size of this array needs to be 3*input_variable. How can I define a number externally, which is multiplied by an input value, that I can use in a struct to declare the length of an array?

I have tried defining the variable h outside of main as

extern h

then assigning it's value in main from the input variable.

I have also tried to use (in summary)

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;
}

I would love to be able to allocate the size of an array in a struct using an input parameter. Thank you.

Hm. Plain C-arrays in C++. Mostly never needed. OK, you want to interface to a library function.

My guess is that the library does not expect an array, but a pointer. And since your struct contains an array to pointer to doubles, I assume the lib wants to see a double**.

I hardly can imagine that old libraries use references or pointer to arrays, something like:

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

because also here you need an array with a size known at compile time.

I'd rather expect something like

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

So, use a std::vector like this:

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

And if you want to hand over the arrays data to the lib functions, then use the vectors data function.

function (arr.data());

You could also create the array with new.

Last hint: Do not use raw pointers.

I hope that I could help a little . . .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM