【问题标题】:How to define array size in a struct from an "external" int defined in input如何从输入中定义的“外部”int定义结构中的数组大小
【发布时间】:2023-03-16 18:16:01
【问题描述】:

我有一个结构体,里面有一个数组。该数组的大小需要为 3*input_variable。如何在外部定义一个数字,它乘以输入值,我可以在结构中使用它来声明数组的长度?

我尝试将 main 之外的变量 h 定义为

extern h

然后从输入变量中分配它的值。

我也尝试过使用(总结)

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

我希望能够使用输入参数在结构中分配数组的大小。谢谢。

【问题讨论】:

  • 在 c++ 中使用 std::vector 动态调整数组大小-
  • C++ 中数组的大小是编译时间常数,你无法通过这种幼稚的技巧来改变它。使用std::vector
  • 那么不发送结构体而是发送二进制缓冲区
  • 您不能在 C++ 中执行此操作。看起来你的目标是一个灵活的数组成员。您必须在 C 或 C++ 编译器中执行此操作,该编译器打破了 C++ 标准并支持灵活的数组成员
  • 结构到底是什么样的?我们或许能够提供可行的替代方案

标签: c++ arrays dynamic struct extern


【解决方案1】:

嗯。 C++ 中的普通 C 数组。大多数时候不需要。好的,您想要与库函数交互。

我的猜测是该库不需要一个数组,而是一个指针。而且由于您的结构包含一个指向双精度指针的数组,因此我假设库希望看到一个双精度**。

我几乎无法想象旧库使用引用或指向数组的指针,例如:

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());

您也可以使用 new 创建数组。

最后提示:不要使用原始指针。

希望能帮上点忙。 . .

【讨论】:

  • 谢谢你 armin - 我支持你但因为这篇文章让我低于 15 代表它没有出现。一定会喜欢的。如果可行,我将尝试您的建议和评论。
猜你喜欢
  • 1970-01-01
  • 2017-11-21
  • 2012-11-14
  • 2022-11-09
  • 2013-11-09
  • 2016-04-27
  • 2016-05-02
  • 2015-08-26
  • 2021-12-24
相关资源
最近更新 更多