命令行参数
在支持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/