首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Visual 2010环境中用C创建可变长度数组?

如何在Visual 2010环境中用C创建可变长度数组?
EN

Stack Overflow用户
提问于 2019-05-29 05:47:59
回答 2查看 1.7K关注 0票数 2

我想在Visual 2010环境中为我的代码创建一个可变长度数组。

我使用长度x的数组来尝试代码,因为它是经过用户传递的。但我面临的错误是:

"error C 2466:无法分配一个大小为0的常量数组“,"error C2133:'v_X_array‘:未知大小”。

代码语言:javascript
复制
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] = 0v_X_array[1] =1v_X_array[2]=2 . v_X_array[10]=10;for x = 10;

我该怎么做?

注意:不应该使用callocmalloc

EN

回答 2

Stack Overflow用户

发布于 2019-05-29 09:46:10

如果您需要代码是可移植的,则不能使用这种数组定义来处理内存区域。

在不涉及具体实现的情况下,您可以使用两种通用方法:

  1. 定义了一个足够大的数组,在最坏的情况下。这是严格依赖于应用程序的,所以你只能靠自己了。
  2. 使用动态分配定义“数组”。使用该方法,您可以定义任意大小的内存区域。

如果您选择了备选方案2:

当你不再需要内存时,别忘了去分配它.

为了避免频繁分配和取消分配,您可以定义缓冲区一次(可能比当前调用所需的要大),并多次使用它。您可以使用与上面选项1相同的结果-从一开始就定义一个大数组。

因为您不应该使用动态分配("calloc和malloc不应该使用“),那么您将有选项1。

我期望ans为v_X_array = 0,v_X_array1 =1,v_X_array2=2 .;x = 10;

您希望将11个值存储在一个只能容纳10个的数组中?

票数 0
EN

Stack Overflow用户

发布于 2019-05-29 17:22:44

您不能分配一个大小未知的数组。因此,您需要“在运行时”动态地分配它。您可以使用C++中的"new“或C中的"malloc”进行此分配。

例如:

在C++中,如果要分配一个大小未知的数组,应该执行以下操作:

代码语言:javascript
复制
int* v_X_array = new int[x];
int i;
for (i=0; i<x; i++)
{
    v_X_array[i] = i;
}

我们使用整数指针的原因是"new“返回数组的基址”第一个元素的地址“,所以唯一能存储地址的是指针。

在C中,如果要分配一个大小未知的数组,应该执行以下操作:

代码语言:javascript
复制
    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)是要分配的类型的大小。如果成功,则返回一个指向已分配内存的指针。如果失败,则返回一个空指针。

在这里输入图像描述

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56353862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档