zoukankan      html  css  js  c++  java
  • 重拾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/

  • 相关阅读:
    sys:1: RuntimeWarning: coroutine 'Launcher.killChrome' was never awaited
    python 引用对象相等,还是用list.extend()
    python 3.7.4 垃圾,一整天安装那个mitmproxy ,不行,卡在一个破库叫urwid ,说是os.path()为空,换3.8.2安装成功,垃圾3.7.4迟早要完
    python @staticmethod 注解,静态方法,可以省略类里那个self参数
    spring boot 记一次花了两天还是没有解决的奇怪bug(失去所有响应,post不到了,啥反应也没有了)
    Yum常用命令
    Centos安装与配置
    遍历hashmap的6种方法
    Java定时调度
    ElasticSearch的应用
  • 原文地址:https://www.cnblogs.com/lltong/p/3393288.html
Copyright © 2011-2022 走看看