>>45
ポインタに成り下がるについて説明したいと思います。
少し難しいので、>>55さんが言うように、今は結論だけでもいいかもしれません。

実は私もこのことを最近知ったので、識者の方、間違いがあれば訂正願います。

char a[]で、aは、char[]型なんだけど、3つの場合を除いて、aがchar*型になってしまう
ということです(このことをポインタに成り下がると表現する人がいます)。

具体的には、a == (char*)&aのようなことが起こります(aのアドレス(&a)を取得して、
&aはchar(*)[]型なので、char*に変換)。

char a[]は、char*型になってしまう場面のほうが多いため、aをchar*型であると勘違いす
る初心者は多いです(私もそうでした)。

>>32の例文で以下のようにポインタを1つ進めてみると違いが分かるかもしれません。

printf("%p %p\n", a, &a); // ポインタに成り下がった変数の先頭アドレスと、変数aのアドレス
printf("%p %p\n", a + 1, &a + 1); // ポインタを1つ進めてみると