C言語の質問です
fooという名前のクラスがあったとして、barというメンバ関数を持っています

foo a;
a.bar();
foo *b = 0;
b->bar();
foo *c = new foo();
c->bar();

どれもクラスfooが使われ、barが呼び出されるのですが
この3つにはどんな違いがあるんでしょうか?
また、bでは、cと違いnewを使わなくとも
クラスのポインタの変数を宣言していますが、この場合newを使うメリットはあるのでしょうか
最後に、クラスをこのように使う場合、どの使い方が一番適しているのか、教えて頂きたいです