2016-10-19 5 views
-1

誰かが内部ループポインタを評価する方法を教えてください。*++argv[0]ポインタの配列評価

どのようにして2番目の文字が引数から得られますか?

#include <stdio.h> 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    while (--argc > 0 && (*++argv)[0] == '-') { 

     while ((c = *++argv[0])) { 
      switch (c) { 
       .... 
      } 
      ... 
     } 
    } 
} 
+0

あなたが理解していないコードを書かねばならない魅力的な理由がありますか?ちょうど、それは決して必要ではありません。 –

+1

この種のコードの最善の解決策は、POSIX ['getopt()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html) またはGNUの '' getopt_long() '](https://www.gnu.org/software/libc/manual/html_node/Getopt-Long-Options.html#Getopt-Long-Options)関数を使用します。 –

+0

@HansPassantはいはい。多分別の時。 =) – dud3

答えて

1

配列添字演算子は、接頭辞++および間接参照演算子よりも高い優先度を持ちます。後者の2つの演算子は同じ優先順位を持ち、右から左へ評価されます。それは今第二の文字を指し、文字列へのポインタは、それが接頭増分を用いて1だけインクリメントされ、配列の添字演算子を使用して得られる

*(++(argv[0])) 

、および:第whileループでの発現は、と等価です逆参照演算子を使用して文字が取得されます。

+1

それはすべてを説明した、ありがとう。 =) – dud3