「charへのポインタの配列(要素数3)」へのポインタ

声優名[タブ]作品名[タブ]キャラ名[改行]
↑このような形でキャラの数だけWikipediaからデータを抽出した。全部で74465行。
このテキストデータをソートして番号を付けたい。
そこで、データを全てメモリに置き、ポインタで各名前にアクセスできるようにした。
声優・作品・キャラで、1行に3つのポインタが必要だ。
そこで、charへのポインタを要素数3の配列にする。
char *c[3]; //ここまでは簡単だ。
しかし、mallocでこの配列を74465個確保しようとして、わけがわからなくなった。
char **c[3]; //これは「charへのポインタへのポインタ」の配列だ
char ***c; //これでできなくはないが、それなら**cでもいい
char (*c)[3]; //惜しいけど、これはcharの配列へのポインタだ
char *(*c)[3]; //これでOK、できてみれば簡単だったが、すごく時間がかかった
c = (char *(*)[3])malloc(n * sizeof(*c)); //これでメモリ確保
単なるポインタの配列でも別によかったのだが、このsizeof(*c)が書きたくて頑張った。