1、main可以沒有參數(shù)或者有兩個(gè)參數(shù):
(1)第一個(gè)參數(shù)是命令行的字符串?dāng)?shù)
(2)第二個(gè)參數(shù)是一個(gè)指向字符串的指針數(shù)組
2煤惩、stdlib.h
(1)atoi(char * str);//將字符串轉(zhuǎn)換成整數(shù)爷肝,失敗返回0
(2)atol(char * str);//轉(zhuǎn)換稱long類型
(3)atof(char * str);//轉(zhuǎn)換稱double類型
(4)strtol(char * str, char **endptr, int (5)base);//把字符串轉(zhuǎn)換成double類型猾浦,還可以識(shí)別并報(bào)告字符串中非數(shù)字的第一個(gè)字符,還可以指定數(shù)字基數(shù)
(6)strtoul(char * str, char **endptr, int (7)base);//把字符串轉(zhuǎn)換成double類型陆错,還可以識(shí)別并報(bào)告字符串中非數(shù)字的第一個(gè)字符,還可以指定數(shù)字基數(shù)
strtod(char * str, char **endptr);//把字符串轉(zhuǎn)換成double類型,還可以識(shí)別并報(bào)告字符串中非數(shù)字的第一個(gè)字符
3金赦、C變量的鏈接
(1)分為外部鏈接音瓷、內(nèi)部鏈接、空鏈接
(2)居右代碼塊作用于或者函數(shù)原型作用域的變量有空連接夹抗,由其定義所在的代碼塊或函數(shù)原型所私有
(3)具有文件作用域的變量有外部鏈接绳慎,一個(gè)外部鏈接的變量可以在一個(gè)多文件程序的任何地方使用
(4)具有文件作用域的變量有內(nèi)部鏈接,一個(gè)內(nèi)部鏈接的變量可以在一個(gè)文件的任何地方使用
4漠烧、自動(dòng)變量
(1)屬于自動(dòng)存儲(chǔ)類的變量居右自動(dòng)存儲(chǔ)時(shí)期杏愤、代碼塊作用域和空鏈接。默認(rèn)下已脓,在代碼塊或函數(shù)的頭部定義的任意變量都屬于自動(dòng)存儲(chǔ)類珊楼,也可以顯式使用auto定義:auto int plox;//auto稱為存儲(chǔ)類說明符
(2)在嵌套代碼塊中,如果在內(nèi)層代碼塊定義了一個(gè)具有和外層代碼塊變量同一名字的變量度液,內(nèi)層代碼塊定義的名字是內(nèi)層代碼塊所使用的變量厕宗,稱為內(nèi)層定義覆蓋了外部定義
(3)除非顯式初始化自動(dòng)變量,否則它不會(huì)被自動(dòng)初始化恨诱,未初始化的值是先前占用分配給它的空間的任意值
5媳瞪、寄存器變量
(1)與自動(dòng)變量一樣,具有代碼塊作用于照宝、空鏈接蛇受、以及自動(dòng)存儲(chǔ)時(shí)期,
(2)通過存儲(chǔ)類說明符register定于:register int quick;
(3)不能對(duì)寄存器變量使用地址運(yùn)算符&
(4)有可能寄存器變量不在寄存器中厕鹃,而在高速內(nèi)存中兢仰,但依然不能對(duì)它使用地址運(yùn)算符
6、具有代碼塊作用域的靜態(tài)變量
(1)代碼塊運(yùn)行完剂碴,靜態(tài)變量不消失
(2)使用const定義:const int stay;
(3)對(duì)函數(shù)參數(shù)不能使用static
7把将、具有外部鏈接的靜態(tài)變量
(1)居右文件作用域、外部鏈接和靜態(tài)存儲(chǔ)時(shí)期
(2)把變量的定義聲明放在所有函數(shù)之外忆矛,即創(chuàng)建了一個(gè)外部變量
(3)可使用extern關(guān)鍵字聲明察蹲,若變量是在別的文件中定義的,使用extern來聲明變量就是必須的
(4)外部變量在本地使用可不聲明催训,如要聲明需要添加extern關(guān)鍵字(對(duì)于數(shù)組洽议,不要填寫數(shù)組長(zhǎng)度),如果沒有添加則會(huì)覆蓋外部變量而創(chuàng)建自動(dòng)變量
(5)如果不顯式地對(duì)外部變量進(jìn)行初始化漫拭,外部變量會(huì)自動(dòng)被賦值為0
8亚兄、具有內(nèi)部鏈接的靜態(tài)變量
(1)具有靜態(tài)存儲(chǔ)時(shí)期、文件作用于以及內(nèi)部鏈接
(2)可被同一文件中的函數(shù)所使用采驻,而普通的外部變量可以被程序的任意文件訪問
(3)可用extern再次聲明任何具有文件作用于的變量
9审胚、多文件中的全局變量
(1)除了一個(gè)聲明外匈勋,其他所有聲明都必須使用關(guān)鍵字extern,并且只有在定義聲明中才可以對(duì)該變量進(jìn)行初始化
(2)除非在第二個(gè)文件中也聲明了該變量(使用extern)膳叨,否則在一個(gè)文件中定義的外部變量不可以用于第二個(gè)文件
(3)一個(gè)外部變量聲明本只是使一個(gè)變量可能對(duì)其他文件可用
10洽洁、 存儲(chǔ)類說明符
(1)auto, register, static, extern, typedef, 只能使用一個(gè)
(2)auto表明一個(gè)變量具有自動(dòng)存儲(chǔ)時(shí)期,該說明符只能用在具有代碼塊作用域的變量聲明中
(3)register只能用于具有代碼塊作用域的變量菲嘴,它將一個(gè)變量歸入寄存器存儲(chǔ)類诡挂,相當(dāng)于請(qǐng)求將該變量存儲(chǔ)在一個(gè)寄存器內(nèi),它的使用也使你不能獲得變量的地址
(4)static在用于具有代碼塊作用域的變量的聲明時(shí)临谱,使該變量具有靜態(tài)存儲(chǔ)時(shí)期,從而得以在程序運(yùn)行期間(即使在包含該變量的代碼塊并沒有運(yùn)行時(shí))存在并保留其值奴璃。變量仍具有代碼塊作用域和空鏈接悉默,static用于具有文件作用域的變量的聲明時(shí),表明該變量具有內(nèi)部鏈接
(5)extern表明你在聲明一個(gè)已經(jīng)在別處定義了的變量苟穆。如果包含extern的聲明具有文件作用域抄课,所指向的變量必然具有外部鏈接。如果包含extern的聲明具有代碼塊作用域雳旅,所指向的可能具有外部鏈接也可能具有內(nèi)部鏈接跟磨,這取決于該變量的定義聲明
11、存儲(chǔ)類和函數(shù)
(1)double ganma();//默認(rèn)是外部的函數(shù)
(2)static double beta();//beta函數(shù)被限定在該文件內(nèi)攒盈,其他文件可使用相同名稱的不同函數(shù)
(3)extern double delta();//使用關(guān)鍵字extern來聲明在其他文件中定義的函數(shù)
12抵拘、隨機(jī)數(shù)
(1)rand()產(chǎn)生隨機(jī)數(shù)
(2)定義隨機(jī)數(shù)的范圍: rand() % sides + 1;
(3)rand()是偽隨機(jī)數(shù)發(fā)生器,隨機(jī)數(shù)的產(chǎn)生基于一個(gè)稱為“種子”的數(shù)字
13型豁、分配內(nèi)存malloc, free, calloc
(1)double * ptd = (double *)malloc(30 * sizeof(double));
(2)可以用數(shù)組的方式來訪問內(nèi)存塊的各個(gè)元素
(3)創(chuàng)建動(dòng)態(tài)大小的內(nèi)存空間(數(shù)組):double * ptd = (double *)malloc(n * sizeof(double));
(4)malloc創(chuàng)建的地址需要通過調(diào)用free釋放內(nèi)存:free(ptd);
(5)如果無法分配內(nèi)存空間就返回空指針
(6)類型指派(double )在c可選僵蛛,但在c++中是必須的
(7)stdlib.h 提供退出程序函數(shù) exit(),其中常量參數(shù):EXIT_SUCCESS, EXIT_FAILURE
(8)long * newmen = (long )calloc(100, sizeof(long));,塊中的全部位置零,可用free釋放內(nèi)存
(9)malloc和變長(zhǎng)數(shù)組的區(qū)別:變長(zhǎng)數(shù)組是自動(dòng)存儲(chǔ)的迎变,變長(zhǎng)數(shù)組所用內(nèi)存空間在運(yùn)行完定義部分之后會(huì)自動(dòng)釋放
(10)malloc創(chuàng)建多維數(shù)組:int ( p2)[m] = (int ()[m])malloc(n * m * sizeof(int));
14充尉、類型限定詞
(1)冪等性:const const const int n = 6;//相當(dāng)于 const int n = 6;
(2)用const修飾指針,const float * pf;//pf指向一個(gè)常量浮點(diǎn)數(shù)值衣形,指針指向的地址可改驼侠,指向的數(shù)據(jù)不可改
(3)float * const pt;//pt是一個(gè)常量指針,指向的地址不可改谆吴,指向的數(shù)據(jù)可改
(4)const float * const ptr;//ptr是一個(gè)指向常量的常量指針
(5)cosnt修飾函數(shù)參數(shù)const int array[], cosnt int * array, 表明array指向的數(shù)據(jù)是不可變的
(6)對(duì)全局變量使用const倒源, 其他文件調(diào)用聲明 extern const double PI, extern const char * MONTH[]
(7)類型限定詞volatile表明該變量除了可被程序意外還可被其他代理改變
(8)類型限定詞restrict允許編譯器優(yōu)化幾種代碼增強(qiáng)計(jì)算支持,只可用于指針纪铺,并表明指針是訪問一個(gè)數(shù)據(jù)對(duì)象的唯一且初始的方式:int * restrict restar = (int *)malloc(10 * sizeof(int));
(9)void ofmout(int * const a1, int * restrict a2, int n);//以前的風(fēng)格
void ofmouth(int a1[const], int a2[restrict], int n);//C99允許
double stic(double ar[static 20]);
15相速、標(biāo)準(zhǔn)I/O
(1)FILE *fp;
(2)fp = fopen(filename, "r");//打開文件失敗返回NULL
(3)(ch = getc(fp)) != EOF //讀取一個(gè)字符
(4)putc(ch, stdout); //相當(dāng)于putchar(ch);
(5)fclose(fp);
(6)fopen()函數(shù)的模式字符串
①"r":打開一個(gè)文本文件,可以讀取文件
②"w":打開一個(gè)文本文件鲜锚,可以寫入文件突诬,先將文件的長(zhǎng)度截為零苫拍,如果該文件不存在則先創(chuàng)建之
③"a":打開一個(gè)文本文件,可以寫入文件旺隙,向已有文件的尾部追加內(nèi)容绒极,如果該文件不存在則先創(chuàng)建之
④"r+":打開一個(gè)文本文件,可以進(jìn)行更新蔬捷,也即可以讀取和寫入文件
⑤"w+":打開一個(gè)文本文件垄提,可以進(jìn)行更新(讀取和寫入),如果該文件存在則首先將其長(zhǎng)度截為零周拐,如果不存在則先創(chuàng)建之
⑥"a+":打開一個(gè)文本文件铡俐,可以進(jìn)行更新(讀取和寫入),向已有文件的尾部追加內(nèi)容妥粟,如果該文件不存在則先創(chuàng)建之审丘,可以讀取整個(gè)文件,但寫入時(shí)只能追加內(nèi)容
⑦"rb","wb","ab","ab+","a+b","wb+","w+b","ab+","a+b":與前面的模式相似勾给,只是使用二進(jìn)制而非文本模式打開文件
(7)putc(ch, fpout);//將ch字符寫入到FILE指針fpout指定的文件中
(8)fp = getc(fp);//當(dāng)嘗試讀入字符時(shí)發(fā)現(xiàn)已經(jīng)達(dá)到文件結(jié)尾,getc()函數(shù)會(huì)返回一個(gè)特殊只EOF
(9)fclose(fp)函數(shù)關(guān)閉由指針fp指定的文件滩报,同時(shí)根據(jù)需要刷新緩沖區(qū),更正規(guī)的程序還要檢查是否成功關(guān)閉了文件播急,如果文件成功關(guān)閉脓钾,fclose()函數(shù)將返回值0,否則返回EOF
(10)標(biāo)準(zhǔn)文件指針:標(biāo)準(zhǔn)輸入stdin, 標(biāo)準(zhǔn)輸出stdout, 標(biāo)準(zhǔn)錯(cuò)誤stderr