It is not an array of variable length; this is a "structural hack". The standard (starting with C99) method uses a "flexible array element" that will look like this:
struct AudioBufferList
{
UInt32 mNumberBuffers;
AudioBuffer mBuffers[];
};
FAM , ""; numBuffer mBuffers:
size_t n_bytes = sizeof(struct AudioBufferList) + numBuffer * sizeof(AudioBuffer);
struct AudioBufferList *bp = malloc(nbytes);
, malloc() calloc() , C , . , - , , .
, , FAM; , . , , FAM. , calloc(), FAM; , malloc(), .