我有一个包含int
数组的struct
。 我不想修复数组的大小,因为我不知道有多少元素会进入它并且不想浪费内存。
一个int指针数组本质上是相同的。
我尝试了一个指向整数数组的指针和一个无效的双指针。
我怎么能做到这一点?
注意:
我的意思是int指针数组是如果我设置一个固定大小的int指针数组,那么我仍然在浪费空间,所以在这个意义上它与int
的固定大小数组没有区别。 唯一的区别是int
和int 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];
。 这当然可以让你更容易创建空数组。
以上就是c/c++开发分享int数组的未知大小相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519199.html