覚えておくべきこと:
- 配列の名前は、その最初の要素のアドレスです
したがって、配列名が a であるため、a を印刷すると、a[0]
(配列のアドレスでもある) のアドレスが得られます。つまり、&a[0]
(と同じa
)の値が得られ、&a
同じになります。
これで、最初の要素a
を&a[0]
参照して参照すると、次の 3 つの方法で最初の要素を逆参照できることがわかりました。
*a
*(&a[0])
a[0]
- 内部的に、これは次のように変換されることに注意してください。*(a+0)
覚えておくべきこと:
2. ポインタに整数を追加すると、次の要素へのポインタが取得されます
ここで、&a
配列全体のアドレスを指します。の値はや と&a
同じですが、最初の要素へのポインターではなく、配列へのポインターです。したがって、ieに 1 を追加すると、この配列を超えることになります。&a[0]
a
&a
&a + 1
同様に、&a[0]
とa
は最初の要素へのポインタであるため、それらに 1 を追加すると、配列の次の要素が得られます (配列に複数の項目が定義されている場合)。つまり、最初の要素から次の要素を指します(a+1)
。&a[0] + 1
今、それらを逆参照するために、次を使用できます。
*(a+1)
*(&a[0] +1)
a[1]
- 内部的に、これは次のように変換されることに注意してください。*(a+1)
次の疑問を取り除くために、さらに情報を追加します。
この回答が示すように、配列の名前が最初の要素のアドレスである場合、 &a は最初の要素のアドレスのアドレスになります。
この疑問に対する答えは、いいえでもあり、はいでもあります。
- いいえ、住所の住所のようなものはありません。
- はいを理解するには、次の状況を考えて
みてください: 10 個の箱のチョコレートがあり、各箱には 5 個のチョコレートが入っており (箱の中に 1 列に並んでいます)、箱が並んでいるとします。
わかりました、説明するのに十分なチョコレートです。
ここで、ボックスはチョコレートの配列を表します。したがって、それぞれ5個のチョコレートが入った5つの箱があります。そのための宣言は次のようになります。
a
それを C に翻訳すると、5 つの数字を持つ配列であると仮定します。
-さて、最初の箱の場所を教えてくださいと言われたら、あなたはそれを と呼ぶでしょう&a
。2 番目のボックスの場所を教えてほしいと頼んだ場合は、 として参照してください&a +1
。
- 最初の箱に入っている最初のチョコレートの場所を教えてほしいと言われたら、
&a[0]
または(a+0)
またはと言うでしょうa
。
- 最初の箱に入っている 2 番目のチョコレートの場所を教えてほしいと言われたら、
&a[1]
または(a+1)
またはと言うでしょうa+1
。注: では、配列の名前と(a+1)
同様a
に、最初の要素のアドレスであり、整数です。したがって、a
1 ずつ増加すると、2 番目の要素のアドレスを意味します。
- チョコレートの 2 番目の箱の場所を教えてほしいと言ったら、次のように言うでしょう。
(&a+1)
- チョコレートの 2 番目の箱に入っている最初のチョコレートの場所を教えてほしいと頼んだら、次のように言うでしょう
*(&a+1)
。*((&a+1) + 0)
- 2 番目のチョコレートの箱に入っている 3 番目のチョコレートの場所を教えてほしいと言ったら、次のように言うでしょう。
(*(&a+1))+2