C言語の質問です。
staticというものが本に出ていたのですが、”静的に・・”と書いてあるだけで
いまいちよくわかりません。
1.一応理解したと考えているもの
void hoge(){
static a=0;
 :
}
上記は関数を抜けても値を忘れない変数と理解しました。
(関数内でしか使用できないグローバル変数みたいなもの?)

2.理解できないもの。下記のbがaとどう違うのか?
int a=0;
static int b=0;
void hoge(){
 :
}

3.理解できないもの。関数の前に付くstaticは普通の関数とどう違うのか?
static void hoge(){
 :
}

よろしくお願いします。