int数组的未知大小

时间:2014-10-15 05:33:26

标签: c pointers

我有struct,其中包含int个数组。我不想修复数组的大小,因为我不知道会有多少元素进入它并且不想浪费内存。

一个int指针数组本质上是相同的。

我尝试了一个指向整数数组的指针和一个无效的双指针。

我怎么能做到这一点?

注:

我指的是int指针数组的意思是,如果我设置一个固定大小的int指针数组,那么我仍然在浪费空间,所以从这个意义上讲它与int s的固定大小数组没有区别。唯一的区别是intint pointer的大小可能不同。

3 个答案:

答案 0 :(得分:4)

  

一个int指针数组本质上是相同的。

不,你的意思是一个指针(int *):

int *arr = malloc(sizeof(*arr) * n);

如果您事先不知道n

int n = 0, *arr = NULL;

while (condition) {
    arr = realloc(arr, sizeof(*arr) * (n + 1));
    n++;
}

答案 1 :(得分:1)

  

一个int指针数组基本相同

不是真的。指针数组与它完全无关。

你需要的是一个int *a指针,你将它用作指向整数数组的第一个元素的指针。您将在运行时通过malloc以适当的大小自行分配的整数数组。如果需要,您可以使用realloc增加数组。

如果你的struct类型中只有一个运行时大小的数组,你有另一个选项称为“struct hack”。您可以搜索有关“struct hack”的大量信息。这是一个例子:C struct hack at work

答案 2 :(得分:0)

你可以使用这个技巧:

struct stuff
{
  int arr[1];
};

然后,当您创建其中一个时,使用malloc(sizeof(struct stuff) + n*sizeof(int)),其中n是您要存储多少额外整数。然后你可以照常访问它们,例如mystuff.arr[100] n只要int arr[];至少为100。

在C99中,您可以改为int arr[0];,而在C99之前,如果您有GCC,则可以{{1}}。这当然可以让你更容易创建空数组。

相关问题