• C主函数:void main(int argc,char *argv[] )


    这主函数的形参乍一看略抽象啊,什么意思?主函数还有参数了?

    这是用来在命令行里传递参数用的!

    argc 记录命令行参数个数(以间隔为界,不含间隔);*argv[] 是个指针数组,分别指向每个参数。

    例如:在命令行执行 a.exe username password ,则

    argc 等于 3 ,

    argv[0] 为 “a.exe”

    argv[1] 为 “username”

    argv[2] 为 “password”

    又有这样的主函数:void main(int argc,char **argv) 这又是什么鬼?

    其实和上面那个是一样的!这就涉及到数组和指针的关系问题了,他俩真是纠缠不清呢。

    在C语言里,要想定义一个字符串,有两种办法:

    1、定义一个字符数组:char a[] = "hello"

    2、定义一个字符指针:char *b = "hello"

    a 和 b 中存储的都是首字符的地址。我们可以通过 a[2] 得到 “l” ,而且,也可以通过 p[2] 得到 “l”。

    printf(a) 和 printf(b) 是一样的。在打印时,printf()打印指向的这个字符,如果后面仍有字符,就挪动指针继续打印,直到。

    事实上,在通过a[2]取得元素值时,其内部就是通过指针方法得到的。

    而两者的不同之处在于:

    a 是一个常量,存储的是第一个字符的地址,是不可变的。比如 a++就是错的。

    b 是个指针变量,存储第一个字符的地址,也就是字符串的地址,它是可变的,可以b++,还可通过 *(b+2) 得到 “l”。

    插播一条基础知识:

    回到上面 char *argv[] 和 char **argv 的问题,两者为什么是一样的呢?

    char *argv[] 是一个指针数组(从右往左读,[]的优先级高于*,如果是char (*argv)[] 的话就是一个数组指针了),数组的每一项都是一字符指针,如下图:

    char **argv 从右往左读-> (char *)(*argv) ,可以发现argv是一个指针,指向什么呢,指向字符指针!那么这是一个二级指针,字符指针的指针,相当于字符数组的数组。当取argv[1]时,也就得到第二个字符指针了。所以结构其实和上图是一样的。

  • 相关阅读:
    Serverless 架构下的服务优雅下线实践
    容器技术之发展简史
    Fluid 0.3 新版本正式发布:实现云原生场景通用化数据加速
    阿里云研究员叔同:Serverless 正当时!
    精准容量、秒级弹性,压测工具 + SAE 方案如何成功突破传统大促难关?
    如何提升微服务的幸福感?
    Dubbo 3.0 前瞻之:常用协议对比及 RPC 协议新形态探索
    服务发现技术选型那点事儿
    [漫谈] 状态
    [漫谈] 软件设计的目标和途径
  • 原文地址:https://www.cnblogs.com/babywhale/p/4482733.html
Copyright © 2020-2023  润新知