• 重拾C,一天一点点_11


    命令行参数

    在支持C语言的环境中,可以在程序开始执行时将命令行参数传递给程序。

    调用主函数main时,它带有两个参数,第一个参数(argc,用于参数计数)的值表示运行程序时命令行参数的数目;第二个参数(argv用于参数向量)是一个指向字符串数组的指针,其中每个字符串对应一个参数。

      echo hello, world    //命令行中各参数间以空格隔开,hello,算一个参数

    按照C语言的约定,argv[0]的值是启动该程序的程序名,因此argc的值至少为1.如果argc为1,则说明程序名后面没有命令行参数。argv[0]、argv[1]和argv[2]分别对应"echo"、"hello,"、"world"。最后一个可选参数为argv[argc-1]。ANSI标准要求argv[argc]的值必须为一空指针。

    //回显程序命令行参数

     1 #include <stdio.h> 
     2 /****回显程序命令行参数***/
     3 main(int argc, char *argv[]){
     4     /*
     5     int i;
     6     for(i=1; i<argc; i++){
     7         printf("%s%s",argv[i],(i<argc-1) ? " " : "");
     8     }
     9     */
    10     while(--argc > 0){
    11         printf("%s%s", *++argv, (argc > 1) ? " " : "");
    12     }
    13     printf("
    ");
    14     return 0;
    15 }

    UNIX系统中的C语言程序有一个公共的约定:以负号开头的参数表示一个可选标志或参数。假定用-x(代表“除...之外”)表示打印所有与模式不匹配的文本行,用-n(代表”行号“)表示打印行号,那么以下命令:

      find -x -n 模式    //打印所有与模式不匹配的行,并在每个打印行的前面加上行号
    指向函数的指针

      int (*comp)(void *, void *)  //表明comp是一个指向函数的指针,该函数有两个void *类型的参数,其返回值类型为int

      int *f();          //f函数,返回一个指向int类型的指针

      int (*pf)();         //pf是一个指向函数的指针,返回int类型的对象

    *是一个前缀运算符,其优先级低于(),也低于[]。

    这一部分有点走过场了,回头再加强吧。

    结构:感觉对象是结构的加强版

    1 struct point{
    2     int x;
    3     int y;
    4 }

    关键字struct引入结构声明,后接花括号。struct后面的名字可选,称为结构标记,用于为结构命名。

    struct {...} x, y, z;    //类似int x, y, z;声明

    如果结构声明的后面不带变量表,则不需要为它分配存储空间,仅描述一个结构的模板。

    struct point pt;  //定义一个struct point类型的变量pt

     1 #include <stdio.h> 
     2 
     3 main(){
     4     struct point{
     5         int x;
     6         int y;
     7     };    
     8     struct point pt1;
     9     pt1.x = 100;
    10     pt1.y = 150;
    11     struct point pt2 = {200, 300}; 
    12     printf("%d,%d
    ", pt1.x, pt2.y);        //100,300
    13     
    14     struct rect{
    15         struct point pt1;
    16         struct point pt2;
    17     };
    18     struct rect re1 = {pt1, pt2};
    19     printf("%d
    ", re1.pt1.x);        //100
    20 }
     1 #include <stdio.h>
     2 struct point makepoint(int x, int y);
     3 
     4 struct point{
     5     int x;
     6     int y;
     7 };
     8 main(){
     9     struct point pt1 = makepoint(100, 200);
    10     printf("%d
    ", pt1.x+pt1.y);            //300
    11 }
    12 
    13 struct point makepoint(int x, int y){
    14     struct point temp;
    15     temp.x = x;
    16     temp.y = y;
    17     return temp;
    18 }

     struct point *pp;    //定义一个指向struct point类型对象的指针。(*pp).x此处的圆括号不可省略,因为结构成员运算符“.”的优先级比“*”高。

    结构指针使用频度高,为方便,可简写如下:

      p->结构成员    //p是一个指向结构的指针,有点类似$this->name

    运算符.和->是从左至右结合的:  r.pt1.x  <=> rp->pt1.x

     附:

    1.、老师给全班60个学生布置了两道作业题,其中做对第一题的有31人,做对第二题的有40人,另有4人都做错了,请问两道题都做对的有几个人?

      小学的题目,刚才自己看了这题感觉到有点绕了,呵呵,记得以前做这种题目还是很厉害的,想当年了。

    2、毕业了,寝室的5个人需要分书架,一共有3个一模一样的书架,把这三个书架分给3个人,然后分到书架的三个人各拿出1000元,平均分给其余两人。这样一分,大家都觉得挺合理的。事后,其中一人算了半天也不知道到底一个书架是多少钱,你能告诉他吗?

    原文作者:lltong,博客园地址:http://www.cnblogs.com/lltong/

  • 相关阅读:
    [小技巧] micropython 如何执行 *.mpy 文件
    从零开始深入 Linux 底层(软件工程)
    从嵌套结构中取值时如何编写兜底逻辑
    学习JUC源码(2)——自定义同步组件
    学习JUC源码(1)——AQS同步队列(源码分析结合图文理解)
    Java多线程中的wait/notify通信模式
    详解Java锁的升级与对比(1)——锁的分类与细节(结合部分源码)
    认识Redis集群——Redis Cluster
    工作三年多的感慨与总结(二)
    工作三年多的感慨与总结(一)
  • 原文地址:https://www.cnblogs.com/lltong/p/3393288.html
Copyright © 2020-2023  润新知