構造体のリストを出力する関数を書くとします

(1)最初はこう書いてた
void get_foolist(int *count, struct foo **list);

(2)なんか汚いなあと思い始めて、こうしてみた
struct foolist {
 int nelem;
 struct foo **list;
};
struct foolist *get_foolist(void);

(3)しばらくして、あれ?これでいいんじゃないの?と思った
struct foo get_foolist(void);

私の少ない経験では(3)の方法を使っているプログラムを
見たことがないのですが、何か致命的な欠点でも
あるんでしょうか?