如何在C中声明运行时数组的大小?

t1rydlwq  于 2022-12-11  发布在  其他
关注(0)|答案(6)|浏览(146)

我基本上想要C的等价物(好吧,只是数组部分,我不需要类和字符串解析等等):

public class Example
{
    static int[] foo;
    public static void main(String[] args)
    {
        int size = Integer.parseInt(args[0]);
        foo = new int[size]; // This part
    }
}

请原谅我对C语言的无知。我已经被java腐 eclipse 了;)

nnt7mjpx

nnt7mjpx1#

/* We include the following to get the prototypes for:
 * malloc -- allocates memory on the freestore
 * free   -- releases memory allocated via above
 * atoi   -- convert a C-style string to an integer
 * strtoul -- is strongly suggested though as a replacement
*/
#include <stdlib.h>
static int *foo;
int main(int argc, char *argv[]) {
    size_t size = atoi(argv[ 1 ]); /*argv[ 0 ] is the executable's name */
    foo = malloc(size * sizeof *foo); /* create an array of size `size` */
    if (foo) {  /* allocation succeeded */
      /* do something with foo */
      free(foo); /* release the memory */
    }
    return 0;
}
  • 注意:现成的东西,没有任何错误检查。*
xmakbtuz

xmakbtuz2#

在C语言中,如果忽略错误检查,就可以这样做:

#include <stdlib.h>
static int *foo;

int main(int argc, char **argv)
{
     int size = atoi(argv[1]);
     foo = malloc(size * sizeof(*foo));
     ...
}

如果您不需要全局变量,并且正在使用C99,则可以执行以下操作:

int main(int argc, char **argv)
{
    int size = atoi(argv[1]);
    int foo[size];
    ...
}

它使用VLA -可变长度数组。

monwx1rj

monwx1rj3#

不幸的是,这个问题的许多答案,包括被接受的答案,都是 * 正确的 *,但并不 * 等同于OP的代码片段 *。请记住,operator new[]调用每个数组元素的默认构造函数。对于像int这样没有构造函数的POD类型,它们是默认初始化的(读作:零初始化,参见The C++ Standard的§8.5 ¶5-7)。
我刚刚将malloc(分配未初始化的内存)替换为calloc(分配已清零的内存),因此给定C++代码段的等效代码为

#include <stdlib.h>  /* atoi, calloc, free */

int main(int argc, char *argv[]) {
    size_t size = atoi(argv[1]);
    int *foo;

    /* allocate zeroed(!) memory for our array */
    foo = calloc(sizeof(*foo), size);
    if (foo) {
        /* do something with foo */

        free(foo); /* release the memory */
    }

    return 0;
}

很抱歉重提这个老问题,但我觉得不加评论就离开是不对的(我没有必要的代表);- )

h5qlskok

h5qlskok4#

如果需要初始化数据,可以使用calloc:

int* arr = calloc (nb_elems, sizeof(int));
/* Do something with your array, then don't forget to release the memory */
free (arr);

这样,分配的内存将被初始化为零,这可能很有用。注意,可以使用任何数据类型来代替int。

tquggr8v

tquggr8v5#

int count = getHowManyINeed();
int *foo = malloc(count * sizeof(int));
jjjwad0x

jjjwad0x6#

(2)如果一个函数的值是0,则该函数的值为0;这将需要u在声明数组在函数在运行时实现排序算法这将工作在Turbo c++也在这里我在合并排序中应用它
在此输入代码
https://drive.google.com/file/d/12DlUSMFG7YMBWm5gJlF-gSVauJ6yAD5O/view?usp=share_link

相关问题