【问题标题】:How can I implement an array whose size is not known at compile time in C89? [closed]如何在 C89 中实现一个大小在编译时未知的数组? [关闭]
【发布时间】:2013-12-27 14:22:24
【问题描述】:

抱歉,我是 C 的新手,想知道如何创建一个在引入 C99 标准之前的编译时大小未知的数组。

【问题讨论】:

  • 欢迎您。要求代码的问题必须表明对要解决的问题的最低理解。包括尝试过的解决方案、它们为什么不起作用以及预期的结果。
  • 请不要在 1989 C 中编写新软件。

标签: c arrays c89


【解决方案1】:

这很容易。例如,如果要创建一个可变长度的一维int 数组,请执行以下操作。首先,声明一个指向int类型的指针:

int *pInt;

接下来,为它分配内存。您应该知道需要多少元素 (NUM_INTS):

pInt = malloc(NUM_INTS * sizeof(*pInt));

不要忘记free您的动态分配的数组以防止内存泄漏:

free(pInt);

【讨论】:

  • 大粗斜体“谢谢”建议使用sizeof(*pointer) 而不是sizeof(type)
  • @hacks 同意。每个人都在证明这个事实……反复!大声笑
  • @hacks 没错。 :)
  • @FiddlingBits 哦,是不是因为如果你改变一个变量的类型,你就不需要改变你的sizeof 代码,如果你把它写成sizeof(*ptr) 对吧?是这个原因吗?
  • @Utku 正确!如果你改变变量的类型,你可能会引入一个微妙的错误,而不是你使用的 sizeof on。
【解决方案2】:

使用stdlib.h 中的malloc 函数创建一个动态数组对象。

【讨论】:

    【解决方案3】:

    通常的方法是在堆上分配数据

      #include <stdlib.h>
      void myfun(unsigned int n) {
        mytype_t*array = (mytype_t*)malloc(sizeof(mytype_t) * n);
        // ... do something with the array
        free(array);
      }
    

    您也可以在堆栈上分配(因此您不需要手动释放):

      #include <alloca.h>
      void myfun(unsigned int n) {
        mytype_t*array = (mytype_t*)alloca(sizeof(mytype_t) * n);
        // ... do something with the array
      }
    

    【讨论】:

      【解决方案4】:

      您可以通过dynamic memory allocation 执行此操作。使用malloc函数。

      【讨论】:

        【解决方案5】:

        malloc 或 calloc

        YourType* ptr = malloc(sizeof(YourType)*NumberOfItemsYouNeed)
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-15
        • 2021-07-31
        • 1970-01-01
        • 2013-07-07
        • 2016-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多