在运行时使用c ++创建静态数组

时间:2011-06-12 23:01:39

标签: c++ arrays

有没有办法在运行时用c ++创建静态数组。 我想要的只是想要从用户那里获取输入数字并在运行时创建一个输入数量大小的静态数组。没有新的运算符只需要静态数组只需要指针吗?

6 个答案:

答案 0 :(得分:5)

没有。在程序代码实际运行之前(例如:在调用static之前),main变量已分配。你需要的是一个动态(也就是在运行时创建)数组。如果你想避免使用new,你可以在堆栈上创建它(通过将参数传递给将创建它并在该函数中处理它的函数),但这与static不同。您还可以使用模板容器来为您进行分配和调整大小(如std::vector,在其他答案中提到)

修改

似乎让一些人感到困扰,我没有提到初始化 static对象的问题。虽然与问题没有直接关系 - 值得知道范围内的静态成员变量或静态变量可以在运行时初始化,它们的空间是在main之前保留的,因此无法更改变量的大小

答案 1 :(得分:4)

如果你的意思是

unsigned size;
std::cin >> size;
int arr[size];

然后:。 C99有一个名为Variable-Length-Arrays的功能,但C ++ 03(和'0x)标准没有这种功能的概念。

答案 2 :(得分:1)

没有

根据定义,您需要动态分配大小在运行时之前未知的任何内容。这就是new和朋友存在的原因。

答案 3 :(得分:1)

使用alloca在堆栈上分配空间,就像静态数组或类似C99可变长度数组一样。

#include <iostream>
#include <alloca.h>
int main() {
        unsigned sz;
        std :: cin >> sz;
        int * p = static_cast<int*>(alloca(sz * sizeof(int)));
        // do stuff with p, do not attempt to free() it
}

我只用过C,但效果很好。首先阅读它。它可能不是很便携。

答案 4 :(得分:0)

数组为static对您来说意味着什么?你认为它给你带来了什么好处?

实际上,任何static变量(包括数组)都在程序开头保留其存储空间。因此,必须在程序开始运行之前知道它的大小,因此它不能以任何方式依赖于用户输入。

有许多方法可以制作动态非静态数组,但请告诉我们您要做的事情。

答案 5 :(得分:0)

听起来你想要的是一个数组,其大小是运行时定义的,但其生命周期由static storage duration定义(即程序的长度)。

您无法使用语言中内置的基本数组。这些对象的大小在编译时定义,不能在运行时修改。但是有几种选择。

基本的std :: vector可能就是你想要的:

std::vector<int>    data;

int main()
{
    int size;
    std::cout << "Input the size of the array\n";
    std::cin >> size;

    // This line sets the size of the container
    // vector is basically a C++ wrapper around a dynamically sized array
    data.resize(size);

    // Now we can safely read values into the array (like) container.
    for(int loop =0;loop < size;++loop)
    {
        std::cout << "Input Value " << loop << "\n";
        std::cin >> data[loop];
    }
}