命令行參數數組
在支持C語言的環境中,能夠在程序開始執行時將命令行參數傳遞給程序。函數
調用主函數main時,它帶有兩個參數,第一個參數(argc,用於參數計數)的值表示運行程序時命令行參數的數目;第二個參數(argv用於參數向量)是一個指向字符串數組的指針,其中每一個字符串對應一個參數。this
echo hello, world //命令行中各參數間以空格隔開,hello,算一個參數spa
按照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("\n"); 14 return 0; 15 }
UNIX系統中的C語言程序有一個公共的約定:以負號開頭的參數表示一個可選標誌或參數。假定用-x(表明「除...以外」)表示打印全部與模式不匹配的文本行,用-n(表明」行號「)表示打印行號,那麼如下命令:code
find -x -n 模式 //打印全部與模式不匹配的行,並在每一個打印行的前面加上行號
指向函數的指針對象
int (*comp)(void *, void *) //代表comp是一個指向函數的指針,該函數有兩個void *類型的參數,其返回值類型爲intblog
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\n", 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\n", 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\n", 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人都作錯了,請問兩道題都作對的有幾我的?
小學的題目,剛纔本身看了這題感受到有點繞了,呵呵,記得之前作這種題目仍是很厲害的,想當年了。
二、畢業了,寢室的5我的須要分書架,一共有3個如出一轍的書架,把這三個書架分給3我的,而後分到書架的三我的各拿出1000元,平均分給其他兩人。這樣一分,你們都以爲挺合理的。過後,其中一人算了半天也不知道到底一個書架是多少錢,你能告訴他嗎?
原文做者:lltong,博客園地址:http://www.cnblogs.com/lltong/