今日本語対応のプログラムを書いているのですが、文字コードがよくわかりません。

1.ワイド文字やマルチバイト文字の具体的なエンコードの指定はどうするのか
2. ソースコード自体の文字コードは何か関係あるのか
3.vc++の文字セットをunicodeにしているのにchar配列に日本語をいれておいても文字化けせずに表示できるのはなぜか

根本的な理解がないのかもしれません。誰か教えてください。