未初始化的数组文字

问题描述 投票:0回答:1

我想创建一个指针,它可以是数组,也可以是空指针。类似的东西

int * arr = (condition) ? int[var] : NULL

但似乎没有办法声明未命名、未初始化、非恒定长度数组。

我知道我可以通过从未初始化的数组开始,然后根据条件将其设置为

NULL
来分多个步骤完成,但这似乎不太优雅。 我也知道我可以使用
malloc()
,但随后我必须手动释放该空间。

在我看来,由于数组只是指向第一个元素的指针,所以我想要的在逻辑上与C并不不一致,但我可能是错的。

在标准C中可以实现这一点吗?有没有什么根本原因导致它无法工作?

arrays c
1个回答
0
投票

如果数组是固定大小,您可以使用复合文字来做到这一点:

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;
© www.soinside.com 2019 - 2024. All rights reserved.