我有struct
,其中包含int
个数组。我不想修复数组的大小,因为我不知道会有多少元素进入它并且不想浪费内存。
一个int指针数组本质上是相同的。
我尝试了一个指向整数数组的指针和一个无效的双指针。
我怎么能做到这一点?
注:
我指的是int指针数组的意思是,如果我设置一个固定大小的int指针数组,那么我仍然在浪费空间,所以从这个意义上讲它与int
s的固定大小数组没有区别。唯一的区别是int
和int pointer
的大小可能不同。
答案 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}}。这当然可以让你更容易创建空数组。