2017-01-14 5 views
-2

私はヘッドファーストCを読み、これまでのところうまくいってますが、私はこの例に問題を抱えている -から3を[ARR]

int doses[] = {1, 3, 2, 1000}; 
printf("Issue dose %i", 3[doses]); 

結果=「発行用量1000」

私はこれが何をするのか知っています、それは線量配列のインデックス3にアクセスします。もっと技術的に私の理解は、それが配列の最初の要素のポインタアドレス(線量変数)

に三つの整数のサイズを追加することにある本は、私は

doses[3] == *(doses + 3) == *(3 + doses) == 3[doses] 

ので、それが動作することを説明して*(3 +用量)== 3(用量)の間のその最終的なジャンプまでそれと一緒に。線量[3]が私が把握しやすいことを考えれば、私は正しく[]の意義を理解していないだろうか?

+0

あなたの最後の「コード」の行における第二と第三式の場合、それがあることは明らかではありません'*(doses + 3)== *(3 + doses)'?最初の式と最後の式では、あなたはすでに「線量= 3 =線量」を理解していることを上に書いています。ポインタの算術演算は、等価な配列の索引付けと同じように動作します。フードの下にポインタを3つ追加すると '3 * sizeof'が返されます。 –

+0

はい、なぜ私が質問したのかという演算子のC標準を見ていないので、3つの線量にジャンプするまでは明らかでした。重複の謝罪しかし、私はいくつかのバリエーションを試してみるのは非常に簡単なものではありません – SMC

答えて

1

次のようにCの標準は[]演算子を定義しています

doses[3] == *(doses + 3) 

Therefore doses[3] will evaluate to: 

*(doses + 3) 
and 3[doses] will evaluate to: 

*(3 + doses) 

は、それはあなたを助けたホープ;)

+0

ああ、それは私が行方不明だったことの一つだと私は考えていない、または本は私が完全にそれを逃した。重複した質問 – SMC

+0

のためにありがとうと申し訳ありませんそれはあなたを助けた;) –

関連する問題