共计 826 个字符,预计需要花费 3 分钟才能阅读完成。
最近在重新学习下 c 语言,浏览《c 程序语言设计》。读到 5.10 节,实现一个“find -x -n 模式”命令,x 示意打印所有与模式不匹配得文本,- n 示意打印行号。看似一个简略得编程。
书中在解决 -nx 命令选项的代码如下(通过删减):
#include <stdio.h>
int main(int argc,char *argv[]){
char c;
while(--argc&&(*++argv)[0]=='-'){while(c=*++argv[0]){switch(c){
case 'x':
printf("x\n");
break;
case 'n':~~~~
printf("n\n");
break;
default :
printf("userage not right\n");
}
}
}
}
(++argv)[0] 和++ argv[0] 看起来真的着实有点晕啊。相必很多人跟我一样,刚开始看到这几行代码不晓得啥意思。遂记录下来,供我当前参考,避免遗记。
main 得参数 argv 的定义:char * argv[],argv 是一个字符指针,指向一个 char \* 的数组。如下图:
++argv 代表什么呢?因为 * 和 ++ 的的优先级雷同,联合性是从右到左,因而 *++argv 首先计算 ++argv。++argv 将 argv 指针下移到下一个元素,在这里指向数组的第二个元素的地位。++argv 那么是第二个元素的值,是一个指向 char 的指针,如下图。
晓得了 *++argv 那么(*++argv)[0],其实相当于 *((*++argv)+0),是数组第二个元素的指向的第一个 char 的值。
如果第一个字符是‘-’, 那么持续向下执行 while(c=++argv[0]),判断是否是规定的属性,退出响应的解决形式。在上图的根底上,++argv[0]是什么呢。因为 [] 的运算符优先级高于 ++ 和 * 因而,首先是计算 argv[0],这个值是数组的值,是数组第二个元素的值。++argv[0]就是将指针指向下一个字符的地位,*++argv[0]
正文完