aの要素数は6で、
a[0] = あ;
a[1] = い;
.
.
a[6] = \0;
日本語の場合、1文字=char1個分とはなりません。使用する文字コードにもよりますが、Shift-JISやEUCならば aの要素数は11 に、UTF-8(Unicode)ならば aの要素数は16 になります。
英語のアルファベットならば 1文字=char 1個分となるため、基本的な考え方はあっています。下記コードでは aは要素数 6 の配列 になります。(配列インデクスは0始まりですから、終端文字'\0'の位置はインデクス5です。)
lang
1char a[] = "ABCDE";
2// a[0] = 'A';
3// a[1] = 'B';
4// ...
5// a[4] = 'E';
6// a[5] = '\0';
その配列を *b に代入した場合、どうなるのでしょうか?
bは何になりますか?
解釈が少し誤っています。配列の先頭要素を指すポインタが、**(bではなくて)* b へ代入されます。下記に図解(ぽいもの)を書いておきます。ご参考に。
lang
1char a[] = "ABCDE";
2char *b = a;
3/*
4 +---+---+---+---+---+----+
5 a[6] | A | B | C | D | E | \0 |
6 +---+---+---+---+---+----+
7 ^
8 |
9 +---+ |
10b | *---+
11 +---+
12*/
bは配列先頭要素を指す、つまり b == &(a[0]) となります。またbの参照先*bは 'A' となります。