1

我知道结果

int *x = malloc(sizeof(int)*100);

int x[100];

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

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

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

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

3 回答 3

2

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

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

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

于 2012-11-18T19:52:34.863 回答
0

如果你不能用循环初始化数组,你可以使用memset()它并摆脱它。

于 2012-11-18T19:52:45.543 回答
0

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

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

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

于 2015-06-05T15:29:59.080 回答