我想创建一个指针,它可以是数组,也可以是空指针。类似的东西
int * arr = (condition) ? int[var] : NULL
但似乎没有办法声明未命名、未初始化、非恒定长度数组。
我知道我可以通过从未初始化的数组开始,然后根据条件将其设置为
NULL
来分多个步骤完成,但这似乎不太优雅。
我也知道我可以使用 malloc()
,但随后我必须手动释放该空间。
在我看来,由于数组只是指向第一个元素的指针,所以我想要的在逻辑上与C并不不一致,但我可能是错的。
在标准C中可以实现这一点吗?有没有什么根本原因导致它无法工作?
如果数组是固定大小,您可以使用复合文字来做到这一点:
int * arr = (condition) ? (int[5]){} : NULL;
但是您想使用可变长度数组。 此类数组无法初始化,因此无法为 VLA 构建复合文字。
您需要坚持使用您建议的替代方法之一,要么创建数组并单独设置指针:
int size = 1;
if (condition) size = var;
int a[size];
int *p = condition ? a : NULL;
或使用
malloc
:
int *p = condition ? malloc(var * sizeof *p) : NULL;