配列とポインタ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ネコイカ

配列とポインタ

#1

投稿記事 by ネコイカ » 15年前

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

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

たかぎ

Re:配列とポインタ

#2

投稿記事 by たかぎ » 15年前

> 配列添え字演算子はポインタに関しても適用できる、とはどういうことでしょうか?

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

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

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

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

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

ネコイカ

Re:配列とポインタ

#3

投稿記事 by ネコイカ » 15年前

回答ありがとうございます。
>一方、&a と書いた場合、その型は int* ではなく、int(*)[4] になります。
すみません。どういう意味か教えてください。

たかぎ

Re:配列とポインタ

#4

投稿記事 by たかぎ » 15年前

> すみません。どういう意味か教えてください。

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

閉鎖

“C言語何でも質問掲示板” へ戻る