我想在Visual 2010环境中为我的代码创建一个可变长度数组。
我使用长度x的数组来尝试代码,因为它是经过用户传递的。但我面临的错误是:
"error C 2466:无法分配一个大小为0的常量数组“,"error C2133:'v_X_array‘:未知大小”。
func1(int x)
{
int v_X_array[x];
int i;
for (i=0; i<x; i++)
{
v_X_array[i] = i;
}
}我希望答案是v_X_array[0] = 0,v_X_array[1] =1,v_X_array[2]=2 . v_X_array[10]=10;for x = 10;
我该怎么做?
注意:不应该使用calloc和malloc。
发布于 2019-05-29 09:46:10
如果您需要代码是可移植的,则不能使用这种数组定义来处理内存区域。
在不涉及具体实现的情况下,您可以使用两种通用方法:
如果您选择了备选方案2:
当你不再需要内存时,别忘了去分配它.
为了避免频繁分配和取消分配,您可以定义缓冲区一次(可能比当前调用所需的要大),并多次使用它。您可以使用与上面选项1相同的结果-从一开始就定义一个大数组。
因为您不应该使用动态分配("calloc和malloc不应该使用“),那么您将有选项1。
我期望ans为v_X_array = 0,v_X_array1 =1,v_X_array2=2 .;x = 10;
您希望将11个值存储在一个只能容纳10个的数组中?
发布于 2019-05-29 17:22:44
您不能分配一个大小未知的数组。因此,您需要“在运行时”动态地分配它。您可以使用C++中的"new“或C中的"malloc”进行此分配。
例如:
在C++中,如果要分配一个大小未知的数组,应该执行以下操作:
int* v_X_array = new int[x];
int i;
for (i=0; i<x; i++)
{
v_X_array[i] = i;
}我们使用整数指针的原因是"new“返回数组的基址”第一个元素的地址“,所以唯一能存储地址的是指针。
在C中,如果要分配一个大小未知的数组,应该执行以下操作:
int* v_X_array = (int*) malloc(x*sizeof(int));
int i;
for(i=0; i<x; i++)
{
v_X_array[i] = i;
}malloc函数接受一个参数,该参数指定要分配的字节数,并返回一个空指针,因此需要转换(int*)。
要获得更多解释,请参见下一节:
如果我们需要分配一个由20个整数组成的数组,它可以如下所示:“malloc( 20 * size of (Int))”,其中20是分配的元素数,size of (Int)是要分配的类型的大小。如果成功,则返回一个指向已分配内存的指针。如果失败,则返回一个空指针。
https://stackoverflow.com/questions/56353862
复制相似问题