从 K& R 的C语的第5.10章开始,argv
的概念被引入以允许命令行参数。
argv
是指向字符指针数组的指针。考虑到这一点,下面的代码如何检查提供的参数是否以连字符开头?
(*++argv)[0] == '-'
根据我的理解,[0]
与*(argv + 0)
相同,所以如果我取( *++argv)
的值,然后将其与*(argv + 0)
结合,我实际得到了什么?< / p>
我知道它会返回参数字符串的第一个字符,但是如何?根据我的理解:
(*++argv)
- 检索指向的值argv
(这会产生另一个指针)[0]
或*(argv + 0)
- 然后从该语句返回指向下一个参数指针的下一个指针。 答案 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 *
。