关于c:读书笔记c指针数组

最近在重新学习下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]

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据