20160721IOS_C

1、main可以沒有參數(shù)或者有兩個參數(shù):
(1)第一個參數(shù)是命令行的字符串數(shù)
(2)第二個參數(shù)是一個指向字符串的指針數(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ù)字的第一個字符,還可以指定數(shù)字基數(shù)
(6)strtoul(char * str, char **endptr, int (7)base);//把字符串轉(zhuǎn)換成double類型,還可以識別并報告字符串中非數(shù)字的第一個字符,還可以指定數(shù)字基數(shù)
strtod(char * str, char **endptr);//把字符串轉(zhuǎn)換成double類型,還可以識別并報告字符串中非數(shù)字的第一個字符
3、C變量的鏈接
(1)分為外部鏈接、內(nèi)部鏈接、空鏈接
(2)居右代碼塊作用于或者函數(shù)原型作用域的變量有空連接,由其定義所在的代碼塊或函數(shù)原型所私有
(3)具有文件作用域的變量有外部鏈接,一個外部鏈接的變量可以在一個多文件程序的任何地方使用
(4)具有文件作用域的變量有內(nèi)部鏈接,一個內(nèi)部鏈接的變量可以在一個文件的任何地方使用
4、自動變量
(1)屬于自動存儲類的變量居右自動存儲時期、代碼塊作用域和空鏈接。默認下,在代碼塊或函數(shù)的頭部定義的任意變量都屬于自動存儲類,也可以顯式使用auto定義:auto int plox;//auto稱為存儲類說明符
(2)在嵌套代碼塊中,如果在內(nèi)層代碼塊定義了一個具有和外層代碼塊變量同一名字的變量,內(nèi)層代碼塊定義的名字是內(nèi)層代碼塊所使用的變量,稱為內(nèi)層定義覆蓋了外部定義
(3)除非顯式初始化自動變量,否則它不會被自動初始化,未初始化的值是先前占用分配給它的空間的任意值
5、寄存器變量
(1)與自動變量一樣,具有代碼塊作用于、空鏈接、以及自動存儲時期,
(2)通過存儲類說明符register定于:register int quick;
(3)不能對寄存器變量使用地址運算符&
(4)有可能寄存器變量不在寄存器中,而在高速內(nèi)存中,但依然不能對它使用地址運算符

6、具有代碼塊作用域的靜態(tài)變量
(1)代碼塊運行完,靜態(tài)變量不消失
(2)使用const定義:const int stay;
(3)對函數(shù)參數(shù)不能使用static
7、具有外部鏈接的靜態(tài)變量
(1)居右文件作用域、外部鏈接和靜態(tài)存儲時期
(2)把變量的定義聲明放在所有函數(shù)之外,即創(chuàng)建了一個外部變量
(3)可使用extern關(guān)鍵字聲明,若變量是在別的文件中定義的,使用extern來聲明變量就是必須的
(4)外部變量在本地使用可不聲明,如要聲明需要添加extern關(guān)鍵字(對于數(shù)組,不要填寫數(shù)組長度),如果沒有添加則會覆蓋外部變量而創(chuàng)建自動變量
(5)如果不顯式地對外部變量進行初始化,外部變量會自動被賦值為0
8、具有內(nèi)部鏈接的靜態(tài)變量
(1)具有靜態(tài)存儲時期、文件作用于以及內(nèi)部鏈接
(2)可被同一文件中的函數(shù)所使用,而普通的外部變量可以被程序的任意文件訪問
(3)可用extern再次聲明任何具有文件作用于的變量
9、多文件中的全局變量
(1)除了一個聲明外,其他所有聲明都必須使用關(guān)鍵字extern,并且只有在定義聲明中才可以對該變量進行初始化
(2)除非在第二個文件中也聲明了該變量(使用extern),否則在一個文件中定義的外部變量不可以用于第二個文件
(3)一個外部變量聲明本只是使一個變量可能對其他文件可用
10、 存儲類說明符
(1)auto, register, static, extern, typedef, 只能使用一個
(2)auto表明一個變量具有自動存儲時期,該說明符只能用在具有代碼塊作用域的變量聲明中
(3)register只能用于具有代碼塊作用域的變量,它將一個變量歸入寄存器存儲類,相當于請求將該變量存儲在一個寄存器內(nèi),它的使用也使你不能獲得變量的地址
(4)static在用于具有代碼塊作用域的變量的聲明時,使該變量具有靜態(tài)存儲時期,從而得以在程序運行期間(即使在包含該變量的代碼塊并沒有運行時)存在并保留其值。變量仍具有代碼塊作用域和空鏈接,static用于具有文件作用域的變量的聲明時,表明該變量具有內(nèi)部鏈接
(5)extern表明你在聲明一個已經(jīng)在別處定義了的變量。如果包含extern的聲明具有文件作用域,所指向的變量必然具有外部鏈接。如果包含extern的聲明具有代碼塊作用域,所指向的可能具有外部鏈接也可能具有內(nèi)部鏈接,這取決于該變量的定義聲明
11、存儲類和函數(shù)
(1)double ganma();//默認是外部的函數(shù)
(2)static double beta();//beta函數(shù)被限定在該文件內(nèi),其他文件可使用相同名稱的不同函數(shù)
(3)extern double delta();//使用關(guān)鍵字extern來聲明在其他文件中定義的函數(shù)
12、隨機數(shù)
(1)rand()產(chǎn)生隨機數(shù)
(2)定義隨機數(shù)的范圍: rand() % sides + 1;
(3)rand()是偽隨機數(shù)發(fā)生器,隨機數(shù)的產(chǎn)生基于一個稱為“種子”的數(shù)字
13、分配內(nèi)存malloc, free, calloc
(1)double * ptd = (double *)malloc(30 * sizeof(double));
(2)可以用數(shù)組的方式來訪問內(nèi)存塊的各個元素
(3)創(chuà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和變長數(shù)組的區(qū)別:變長數(shù)組是自動存儲的,變長數(shù)組所用內(nèi)存空間在運行完定義部分之后會自動釋放
(10)malloc創(chuàng)建多維數(shù)組:int (
p2)[m] = (int (
)[m])malloc(n * m * sizeof(int));
14、類型限定詞
(1)冪等性:const const const int n = 6;//相當于 const int n = 6;
(2)用const修飾指針,const float * pf;//pf指向一個常量浮點數(shù)值,指針指向的地址可改,指向的數(shù)據(jù)不可改
(3)float * const pt;//pt是一個常量指針,指向的地址不可改,指向的數(shù)據(jù)可改
(4)const float * const ptr;//ptr是一個指向常量的常量指針
(5)cosnt修飾函數(shù)參數(shù)const int array[], cosnt int * array, 表明array指向的數(shù)據(jù)是不可變的
(6)對全局變量使用const, 其他文件調(diào)用聲明 extern const double PI, extern const char * MONTH[]
(7)類型限定詞volatile表明該變量除了可被程序意外還可被其他代理改變
(8)類型限定詞restrict允許編譯器優(yōu)化幾種代碼增強計算支持,只可用于指針,并表明指針是訪問一個數(shù)據(jù)對象的唯一且初始的方式:int * restrict restar = (int *)malloc(10 * sizeof(int));
(9)void ofmout(int * const a1, int * restrict a2, int n);//以前的風格
void ofmouth(int a1[const], int a2[restrict], int n);//C99允許
double stic(double ar[static 20]);
15、標準I/O
(1)FILE *fp;
(2)fp = fopen(filename, "r");//打開文件失敗返回NULL
(3)(ch = getc(fp)) != EOF //讀取一個字符
(4)putc(ch, stdout); //相當于putchar(ch);
(5)fclose(fp);
(6)fopen()函數(shù)的模式字符串
①"r":打開一個文本文件,可以讀取文件
②"w":打開一個文本文件,可以寫入文件,先將文件的長度截為零,如果該文件不存在則先創(chuàng)建之
③"a":打開一個文本文件,可以寫入文件,向已有文件的尾部追加內(nèi)容,如果該文件不存在則先創(chuàng)建之
④"r+":打開一個文本文件,可以進行更新,也即可以讀取和寫入文件
⑤"w+":打開一個文本文件,可以進行更新(讀取和寫入),如果該文件存在則首先將其長度截為零,如果不存在則先創(chuàng)建之
⑥"a+":打開一個文本文件,可以進行更新(讀取和寫入),向已有文件的尾部追加內(nèi)容,如果該文件不存在則先創(chuàng)建之,可以讀取整個文件,但寫入時只能追加內(nèi)容
⑦"rb","wb","ab","ab+","a+b","wb+","w+b","ab+","a+b":與前面的模式相似,只是使用二進制而非文本模式打開文件
(7)putc(ch, fpout);//將ch字符寫入到FILE指針fpout指定的文件中
(8)fp = getc(fp);//當嘗試讀入字符時發(fā)現(xiàn)已經(jīng)達到文件結(jié)尾,getc()函數(shù)會返回一個特殊只EOF
(9)fclose(fp)函數(shù)關(guān)閉由指針fp指定的文件,同時根據(jù)需要刷新緩沖區(qū),更正規(guī)的程序還要檢查是否成功關(guān)閉了文件,如果文件成功關(guān)閉,fclose()函數(shù)將返回值0,否則返回EOF
(10)標準文件指針:標準輸入stdin, 標準輸出stdout, 標準錯誤stderr

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容