C数组malloc()VS {}

时间:2012-11-18 19:16:14

标签: c arrays initialization malloc

我知道

的结果
int *x = malloc(sizeof(int)*100);

int x[100];

是一样的,但第一个是分配堆内存,第二个是分配堆栈内存。

现在我需要创建一个巨大的数组(大约10000个元素,而不是模式),我认为malloc()更合适。

但是当我准备初始化阵列时,我遇到了一个问题。 我不能使用任何循环来初始化数组,如何初始化使用malloc创建的数组,就像使用

一样
int x[100] = {1,2,3,4,......,6,7,5};

3 个答案:

答案 0 :(得分:2)

当您说int a[] = { 1, 2, 3 };时,您正在使用初始化程序来提供数组a的初始数据(并推断其大小)。这是C语法的一部分。

当您说int * p = malloc(1000);时,您只是进行库调用并存储指针。语言或库中没有机制为该指针指向的内存提供初始值,也不需要指针指向任何内容(可能是NULL)。

您应该注意到数组不是指针,而指针不是数组。 ap是完全不同的动物,尽管您可以说p[1] = a[1];

答案 1 :(得分:0)

如果无法使用循环初始化数组,则可以使用memset()并远离它。

答案 2 :(得分:0)

如果数据没有变化,最好的方法是写

static const int x [100] = { 23, 12, 5, 7, ... };

没有代码。没有时间进行初始化。我实际上已经看到了以这种方式初始化兆字节数据的代码,没有任何问题。