Quero criar um ponteiro que seja um array ou um ponteiro nulo. Algo como
int * arr = (condition) ? int[var] : NULL
mas não parece haver uma maneira de declarar um array sem nome, não inicializado e de comprimento não constante.
Eu sei que eu poderia fazer isso em várias etapas, começando com um array não inicializado e depois definindo-o como NULL
based na condição, mas isso parece deselegante. Eu também sei que eu poderia usar malloc()
, mas então eu devo liberar manualmente esse espaço.
Parece-me que, como um array é apenas um ponteiro para o primeiro elemento, o que eu quero não é logicamente inconsistente com C, mas posso estar errado.
É possível conseguir isso no C padrão? Existe uma razão fundamental pela qual não poderia funcionar?
Se a matriz tivesse um tamanho fixo, você poderia fazer isso com um literal composto:
No entanto, você quer usar um array de comprimento variável. Tais arrays não podem ser inicializados (até C23, em que a inicialização vazia de VLAs é permitida e seria
= {}
), e como resultado um literal composto não pode ser construído para um VLA.Você precisará usar um dos métodos alternativos que propôs, criando o array e definindo o ponteiro separadamente:
Ou usando
malloc
: