2016-10-19 57 views
-1

有人可以告诉我,我们将如何评估内部循环指针:*++argv[0]数组指针评估

它如何最终从参数中获得第二个字符?

#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

数组下标运算符的优先级高于前缀++和解引用运算符。后两个运算符具有相同的优先级,并从右向左进行评估。在第二while循环的表达式是等效于:

*(++(argv[0])) 

使用数组下标操作者获得的指针串,然后它被一个使用前缀增量递增,它现在指向第二个字符,以及那么使用解引用运算符可以获得该字符。

+1

这说明了一切,非常感谢。 =) – dud3