在c/c+中初始化大小未知的数组+; 当使用C++时,我碰巧发现可以初始化一个数组,这个数组是由运行时的整数i决定的。 我听说C99允许这样做。在编译中,它不确定数组的大小。它将堆栈中的内存重新分配给运行中的数组。我想知道它是如何实现的。 我还听说C允许这样做。这也是一个C++无法覆盖所有C的例子。它是真的吗?< /P> < P>使用C++ >代码:ST::向量< /C>矢量的存储是自动处理的,可根据需要进行扩展和收缩。如果不明确要求,你应该避免使用数组,这对你的情况不适用。 < P>可变长度数组只能在C中使用,而不是在C++中。

在c/c+中初始化大小未知的数组+; 当使用C++时,我碰巧发现可以初始化一个数组,这个数组是由运行时的整数i决定的。 我听说C99允许这样做。在编译中,它不确定数组的大小。它将堆栈中的内存重新分配给运行中的数组。我想知道它是如何实现的。 我还听说C允许这样做。这也是一个C++无法覆盖所有C的例子。它是真的吗?< /P> < P>使用C++ >代码:ST::向量< /C>矢量的存储是自动处理的,可根据需要进行扩展和收缩。如果不明确要求,你应该避免使用数组,这对你的情况不适用。 < P>可变长度数组只能在C中使用,而不是在C++中。,c++,c,C++,C,您应该使用动态数组或std::vector size = 17; int* cxxarray = new int[size]; int* c__array = malloc(sizeof(int)*size); std::vector<int> vector(size); cxxarray[7] = 8; c__array[7] = 8; vector[7] = 8; delete[] cxxarray; free(c__array); // no need to free vect

您应该使用动态数组或std::vector

size = 17;
int* cxxarray = new int[size];
int* c__array = malloc(sizeof(int)*size);
std::vector<int> vector(size);
cxxarray[7] = 8;
c__array[7] = 8;
vector[7] = 8;
delete[] cxxarray;
free(c__array);
// no need to free vector 
size=17;
int*cxxarray=新的int[size];
int*c_u数组=malloc(sizeof(int)*大小);
std::向量(大小);
cxxarray[7]=8;
c__数组[7]=8;
向量[7]=8;
删除[]cxxarray;
自由(c__阵列);
//不需要释放向量

你应该注意指针,特别是在C中,你的问题是根据你的数组大小动态分配内存的。<代码> aloAuth[])/代码>不是标准C的一部分,也不是标准C++的一部分。这是一个特定于供应商的功能。此外,C++通常是非常可取的,因为使用标准容器(如<代码> STD::vector < /代码>)来管理动态分配的数组,而不是使用运算符<代码>新< /C> >和<代码>删除> /代码>——这是更安全的,这意味着操作符<代码>新< /代码>是更好的方法,向量是一个次要的选择。OP显然是指VLAs。@Ludin我会编辑答案谢谢。但是一些IDE实际上将它应用到C++中。例如,克莱恩int n;`cin>>n``inta[n];`在实践中是合法的。@运行Noob当然编译器可以做它想做的任何事情,但是你依赖于那个编译器。