2010-11-25 14 views
2

私はfoo[bar]*(foo + bar)に等しいことを認識していますが、*foo[bar]と等しく、*argv[2]にアクセスしていますか?私はこれを理解するのがやや混乱していますが、おそらく*(*(foo) + bar)のようなものを想定していましたが、確信が持てません。ポインタのポインタの算術演算(* argv [])?

これは簡単な回答であればお詫び申し上げます。

+1

あなたは単にそれを試してみることができます。不確かな場合はかっこを使用します。 – codymanix

答えて

2

それはそれは**(foo + bar)

はなぜあるというのが私の理解です:以下の場合はそう *a[b]**(a+b)

5

*a[b]は、CおよびC++優先ルールのために*(a[b])に相当します。

*foo[bar] 
**(foo + bar) 
+0

ああ!それは理解するのがはるかに簡単です。私はそれが簡単だったことを知っていた、受け入れるために11分待つ必要があります:P – John

3

に相当します。そして、次は同等すぎている、

foo[bar] 
*(foo + bar) 

同等であります?

*foo[bar]foo[bar]が参照解除された後に*されているため、*とfoo[bar]に分割されます。あなたは既に今すぐ*他を追加し、また**(foo + bar)

+0

ジェームズありがとう。 – John

+0

私はあなたの部分が*と[]が過負荷になるという事実に対処することを意図していることを正しく理解していますか? –

+0

@Armen Tsirunyan:「If ... then」は、結果を見つけるために追跡できる論理的控除のプロセスを示していると思います。 – caf

0

*foo[bar]に簡素化*(*(foo + bar))

を持っているものfoo[bar] == *(foo + bar)

答え

foo[bar]へのポインタ参照です。 char *argv[]の宣言を仮定

0

argv[2]はあなたに、その文字列の最初の文字を与え、このポインタをchar *あるargvアレイの第3の要素を参照し、*argv[2]逆参照。