如何初始化一个大小最初未知的数组?

moo*_*234 4 c++ arrays initialization lazy-initialization

说我有这个:

int x;
int x = (State Determined By Program);
const char * pArray[(const int)x]; // ??
Run Code Online (Sandbox Code Playgroud)

在使用之前如何初始化pArray? 因为Array的初始大小由用户输入决定

谢谢!

her*_*tao 8

必须在编译时知道堆栈上动态创建的数组的大小.

你可以使用new:

const char* pArray = new char[x];
...
delete[] pArray;
Run Code Online (Sandbox Code Playgroud)

或者更好地使用std::vector(不需要手动进行内存管理):

vector<char> pArray;
...
pArray.resize(x);
Run Code Online (Sandbox Code Playgroud)


Cat*_*kul 6

如果要在运行时确定大小,则无法在编译时初始化数组.

但是根据你想要做的事情,一个指向const数据的非const指针可能会为你提供你想要的东西.

const char * pArray = new const char[determine_size()];
Run Code Online (Sandbox Code Playgroud)

一个更完整的例子:

int determine_size()
{
    return 5;
}

const char * const allocate_a( int size )
{
    char * data = new char[size];
    for( int i=0; i<size; ++i )
        data[i] = 'a';
    return data;
}

int main()
{
    const char * const pArray = allocate_a(determine_size());
    //const char * const pArray = new char[determine_size()];
    pArray[0] = 'b'; // compile error: read-only variable is not assignable 
    pArray    =  0 ; // compile error: read-only variable is not assignable 

    delete[] pArray;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我同意其他人认为std :: vector可能更像你正在寻找的东西.如果您希望它的行为更像const数组,则可以将其指定给const引用.

#include <vector>

int main()
{
    std::vector<char> data;
    data.resize(5);

    const std::vector<char> & pArray = data;

    pArray[0] = 'b'; // compile error: read-only variable is not assignable
}
Run Code Online (Sandbox Code Playgroud)