C言語なら俺に聞け(入門編)Part 83
■ このスレッドは過去ログ倉庫に格納されています
0059デフォルトの名無しさん
2011/05/03(火) 09:33:14.47ポインタに成り下がるについて説明したいと思います。
少し難しいので、>>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つ進めてみると
■ このスレッドは過去ログ倉庫に格納されています