命令行参数

在支持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]的值必须为一空指针。

//回显程序命令行参数

 #include <stdio.h>
/****回显程序命令行参数***/
main(int argc, char *argv[]){
/*
int i;
for(i=1; i<argc; i++){
printf("%s%s",argv[i],(i<argc-1) ? " " : "");
}
*/
while(--argc > ){
printf("%s%s", *++argv, (argc > ) ? " " : "");
}
printf("\n");
return ;
}

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

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

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

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

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

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

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

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

 struct point{
int x;
int y;
}

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

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

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

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

 #include <stdio.h> 

 main(){
struct point{
int x;
int y;
};
struct point pt1;
pt1.x = ;
pt1.y = ;
struct point pt2 = {, };
printf("%d,%d\n", pt1.x, pt2.y); //100,300 struct rect{
struct point pt1;
struct point pt2;
};
struct rect re1 = {pt1, pt2};
printf("%d\n", re1.pt1.x); //
}
 #include <stdio.h>
struct point makepoint(int x, int y); struct point{
int x;
int y;
};
main(){
struct point pt1 = makepoint(, );
printf("%d\n", pt1.x+pt1.y); //
} struct point makepoint(int x, int y){
struct point temp;
temp.x = x;
temp.y = y;
return temp;
}

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/

重拾C,一天一点点_11的更多相关文章

  1. 重拾C,一天一点点_2

    类型转换一般来说,如果二元运算符的两个操作数具有不同的类型,较低的类型提升为较高类型,结果为较高类型.表达式由float类型的操作数不会自动转换为double类型.使用float类型主要是为了在使用较 ...

  2. 重拾C,一天一点点

    数据类型及长度 char        字符型,占用一个字节 int          整型,通常代表特定机器中整数的自然长度 short       16位 int         16位或32位 ...

  3. 重拾C

    重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...

  4. CSS魔法堂:重拾Border之——更广阔的遐想

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  5. CSS魔法堂:重拾Border之——不仅仅是圆角

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  6. CSS魔法堂:重拾Border之——图片作边框

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  7. CSS魔法堂:重拾Border之——解构Border

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  8. 重拾Blog

    上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...

  9. [linux]重拾linux

    起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使 ...

随机推荐

  1. win10 TortoiseSVN 部分图标不显示

    原因:https://msdn.microsoft.com/en-us/library/cc144123(VS.85).aspx Note   The number of different icon ...

  2. 对Javascript异步执行的理解

    简单的查看了下Javascript异步编程的代码.按照网上的说法,Javascript异步编程的核心就在于setTimeout.这个系统函数让我们将函数的执行放在了一个指定的新“线程”中.于是本来的顺 ...

  3. 项目积累——js应用

    //解决由前台向后台传值中文乱码的问题 encodeURI($("#xmjhbgFile").val())//前台JS中数据加码 String fjmc = java.net.UR ...

  4. 在 angularjs 中集成 bootstrap typeahead

    问题 在使用 typeahead 的时候,有这样一个需求,当用户选中其中一项的之后,将项目对应的 id 保存到另外一个变量中,以后在提交表单的时候,将这个 id 发送到服务器中. 但是,在 typea ...

  5. VC++2005下的ADO SQL语句(like,count,distinct)和操作(转)

    http://blog.sina.com.cn/s/blog_56fd66a70100hxjf.html http://timke.blog.163.com/blog/#m=0 环境:MFC  Dia ...

  6. 【转】SQL注入(通过sqlmap来改变所有事情)

    第一步: sqlmap基于Python2.72版本,所以首先下载: https://www.python.org/  记住不要下载python3 第二步: 安装Python,将sqlmap解压到Pyt ...

  7. 【教程】【FLEX】#003 自定义事件、模块间通讯

    本篇笔记,主要阐明 事件是如何创建 和 如何使用自定义事件达到模块之间通讯 的效果. 句子解释: 什么叫做模块之间的通讯呢?? 简单点说,就是两个模块之间可以互相传数据. A模块 可以接收到 B模块的 ...

  8. 使用Flex4的PopUpManager的addPopUp() 方法弹出 removeChild异常的解决办法

    Flex4中,弹出窗口有两种: Alert.show("balabalabala-");   PopUpManager.addPopUp([要弹出的控件],[父控件],[是否模态] ...

  9. LA3902 Network

    给出一棵树,对于每一个叶子节点要使得在它的k距离内至少一个节点被打了标记,(叶节点不能打标记,非叶结点也不必满足这个条件),现在已经有一个节点s被打了标记,问至少还要打几个标记(这表达能力也是捉急.. ...

  10. JavaScript之数组循环 forEach 循环输出数组元素

    var arrayAll = []; arrayAll.push(1); arrayAll.push(2); arrayAll[arrayAll.length] = 3; arrayAll[array ...