Недавно я столкнулся с определением структуры,
struct arr {
    int cnt;
    struct {
        int  size;
        int *name;
    } list[0];
};
 и теперь я не знаю причины объявления list[0]. Меня интересует, почему это используется. Имеет ли он какое-либо преимущество? Если да, что это?