【发布时间】:2014-09-22 04:58:15
【问题描述】:
从K&R 的 C 书的第 5.10 章 中引入了 argv 的想法,以允许命令行参数。
argv 是一个指向字符指针数组的指针。考虑到这一点,以下代码如何检查提供的参数是否以连字符开头?
(*++argv)[0] == '-'
据我了解,[0] 与*(argv + 0) 相同,所以如果我取( *++argv) 的值,然后将其与*(argv + 0) 结合起来,我实际上会得到什么?
我知道它返回参数字符串的第一个字符,但是如何呢?据我了解:
-
(*++argv)- 检索到argv指向的值(它给出了另一个指针) -
[0]或*(argv + 0)- 然后从该语句返回指向下一个参数指针的下一个指针。 - 我看不出参数的第一个字符是如何从这个语句中获得的。
【问题讨论】:
-
argv[0]与*(argv + 0)相同。但是你没有argv[0]。你有(*++argv)[0],所以它是*(*++argv + 0)。 -
@chris 你是如何“组合” (*++argv) 和 [0] 来生成 *(*++argv + 0) 的?您能否分步进行,以便我理解推导?
-
X[Y]等价于*(X + Y)。 X 是(*++argv),Y 是0。 X 周围的括号在转换后是多余的。
标签: c pointers command-line-arguments argv