ページ 11

配列とポインタ

Posted: 2010年8月18日(水) 13:26
by ネコイカ
参考書を読んでて次のことがわからなくて質問させていただきます
 >配列添え字演算子はポインタに関しても適用できそうな気がしますね。
 >結論的にいうと使えます。次の3つは同じなのです
 >&str[n]
 >pstr+n
 >&pstr[n]
配列添え字演算子はポインタに関しても適用できる、とはどういうことでしょうか?
&pstr[n]これのpは何を表しているんだ??

あと、
 int *p,a[/url]={10,20,30,40}
 p=a
では、p=&aじゃないのはなぜですか

Re:配列とポインタ

Posted: 2010年8月18日(水) 13:35
by たかぎ
> 配列添え字演算子はポインタに関しても適用できる、とはどういうことでしょうか?

ポインタに関しても適用できるのではなく、添字演算子のオペランドは、オブジェクト型へのポインタと整数型でなければなりません。
配列型の変数名は、暗黙的に、その配列の先頭要素へのポインタに変換されます。
結果として、配列の変数名を指定しても、ポインタを指定したのと同じになります。

> &pstr[n]これのpは何を表しているんだ??

名前の一部なので、正確なことはその名前を考えた人に聞くしかありません。
ただ、pointer の p を表す一種のハンガリアン記法だとは思います。

> では、p=&aじゃないのはなぜですか

繰り返しになりますが、配列型の変数名は、暗黙的に、その配列の先頭要素へのポインタに変換されます。
つまり、今回の例でいえば、a は &a[0] に変換されるわけです。
一方、&a と書いた場合、その型は int* ではなく、int(*)[4] になります。

Re:配列とポインタ

Posted: 2010年8月18日(水) 14:16
by ネコイカ
回答ありがとうございます。
>一方、&a と書いた場合、その型は int* ではなく、int(*)[4] になります。
すみません。どういう意味か教えてください。

Re:配列とポインタ

Posted: 2010年8月18日(水) 14:56
by たかぎ
> すみません。どういう意味か教えてください。

書いてあるとおりの意味です。
具体的に、どこがどうわからないのか言ってももらえれば、補足説明できるかもしれません。