理解argv和* ++ argv [0]

时间:2014-07-30 13:55:08

标签: c pointers command-line-arguments argv

K& R 的C语的第5.10章开始,argv的概念被引入以允许命令行参数。

argv是指向字符指针数组的指针。考虑到这一点,下面的代码如何检查提供的参数是否以连字符开头?

(*++argv)[0] == '-'

根据我的理解,[0]*(argv + 0)相同,所以如果我取( *++argv)的值,然后将其与*(argv + 0)结合,我实际得到了什么?< / p>

我知道它会返回参数字符串的第一个字符,但是如何?根据我的理解:

  1. (*++argv) - 检索指向的值argv(这会产生另一个指针)
  2. [0]*(argv + 0) - 然后从该语句返回指向下一个参数指针的下一个指针。
  3. 我不知道如何从这个陈述中获得参数的第一个字符。

1 个答案:

答案 0 :(得分:3)

为了清晰起见,我们将++分开:

argv = argv + 1;

然后我们有:

(*argv)[0] == '-'

(我假设这出现在if声明中)。

请记住p[0]的定义是*(p+0),即*p。所以这与argv[0][0] == '-'相同。

argv[0]是一个char *,它指向字符串的第一个字符。所以argv[0][0]是该字符串的第一个字符。

argv = argv + 1;的效果是使argv指向下一个char *,它紧跟在前一个之后的内存中。

argv是一个指向char *的东西(它本身不是char *)。相邻内存中有一些char *,每个内存都指向位于内存中其他位置的字符串。使用argv,您可以遍历char *

列表