ポインタ変数 *p と p[] は、全く同一だ (ただし [] 内に数字を指定した場合を除く)。
とすると、

  char *m1[];
  char m2[];

は

  char **m1;
  char *m2;

という意味だ。
見ての通り、それぞれ違う型になる。

で、あなたは、別々の型を説明する時も、同じ名前で説明するのか?
例えば、

  short m1;
  long m1;

みたいに書くのか?
それでは混乱するし、実際のソースコードにそのように並べて書けば当然ながら
コンパイルエラーになる。

一体、「両方使うには」 ってどんな使い方を想定したんだ?