int数组的未知大小

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

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

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

我怎么能做到这一点?

注意:

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

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

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

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

如果你事先不知道n

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

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

并不是的。 一系列指针与它完全无关。

你需要的是一个int *a指针,你将它用作指向整数数组的第一个元素的指针。 您将在运行时通过具有适当大小的malloc分配的整数数组。 如果需要,您将能够使用realloc来扩展arrays。

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

你可以使用这个技巧:

 struct stuff { int arr[1]; }; 

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

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