registerやvoratileなどと言う予約語がありますがあれはどういうときに使うのですか?

またunionと言う共用体がありますがあれはstructと言う構造体とはどこが違うのでしょうか?

また関数ポインタと言うのは変数にポインタを持っている関数と言うことでよいのでしょうか?
void *function(*var1, *var2){};
というように、
プログラミング言語Cを見ても関数ポインタのことはさっぱりです。

また、プログラマから見たOSはAPIだ、と聞いたことがありますがあれはドいうことなのでしょうか?
プログラム書くときにAPIを使いこなせないとそのOSのプログラムはかけないと言うことでよいのでしょうか?
WINDWOSでプログラムするときにはWIN32を皆さんは暗記はしなくてもイメージは覚えているのでしょうか?
その上でプログラム上必要な関数は自作するのでしょうか?
どんな命令を作って、どんな命令をAPIから拾ってくるか、と言うイメージがうまくできません。
なかなか初心者以前の入門者の質問で申し訳ございませんがお答えいただけましたらよろしくお願いいたします。

たくさん質問があって申し訳ございませんが、ご回答よろしくお願いいたします。