棧:
局部變量,程序運(yùn)行期間的變量分配大部分是在棧空間分配,
函數(shù)結(jié)束后桑涎,系統(tǒng)自動回收資源后众,空間比較小,
堆:
堆空間比較大垢油,可以由程序員自由支配静汤,只能手動申請和釋放
malloc申請的空間在堆上琅催!
malloc()和free()要成對出現(xiàn)(即申請的堆空間要及時(shí)釋放),
防止出現(xiàn)堆空間不足的現(xiàn)象
常見段錯誤:
指針:
常量指針/NULL/野指針
數(shù)組:
數(shù)組的越界訪問虫给,訪問到非法區(qū)域或者修改了其它變量
其它:
內(nèi)存不足藤抡,雙釋放,內(nèi)存泄露
棧和隊(duì)列
棧: 先進(jìn)后出狰右;
隊(duì)列: 先進(jìn)先出;
預(yù)編譯
#if 表達(dá)式
//執(zhí)行語句
#elif 表達(dá)式
//執(zhí)行語句
#else
//執(zhí)行語句
#endif
文件
-:普通文件
d:目錄文件
l:鏈接文件
p:管道文件
b:塊設(shè)備文件
c:字符文件
f:堆棧文件
(1)文件系統(tǒng)
文件信息:索引結(jié)點(diǎn)(index)
文件操作:文件描述符(fd)
fd最大值
早期的Unix系統(tǒng): 1024
Linux系統(tǒng): 65535
(2)文件的定義
一組相關(guān)數(shù)據(jù)的有序集合舆床,稱為文件
(3)文件的打開和關(guān)閉
打開:fopen(文件名棋蚌,屬性);
關(guān)閉:fclose(文件指針); -------->#include<stdio.h>
注:
文件不關(guān)閉,不然會造成文件數(shù)據(jù)的丟失或混亂
文件指針:
文件指針結(jié)構(gòu)體:FILE
包含了文件的基本信息
定義文件指針
FILE *指針變量名挨队;
文件名:可以是已存在的谷暮,也可以是不存在的,示屬性而定
文件名可以加路徑(絕對路徑)
屬性:
r(讀) w(寫) a(追加)
+:可讀寫
t:文本文件
b:二進(jìn)制文件
rt,wt,at,rb,wb,ab,rt+,wt+,at+,rb+,wb+,at+
rt+/wt+:可讀寫
rt/rb:只讀
wt/wb:只寫盛垦,帶w屬性的可以寫文件湿弦,若文件已存在,則清楚文件腾夯,重新寫文件
若不存在颊埃,則以給定文件名創(chuàng)建文件
r:帶r屬性的,文件必須存在
(4)文件的操作
fgetc()/fputc():字符讀寫函數(shù)
fgets()/fputs():字符串讀寫函數(shù)
fscanf()/fprintf():格式化讀寫函數(shù)
fread()/fwrite():塊讀寫函數(shù)
注:
重點(diǎn)掌握fscanf()/fprintf()或者fread()/fwrite()
至少掌握一種
在C89標(biāo)準(zhǔn)中蝶俱,fread()/fwrite()由BUG0嗬!榨呆!
文件結(jié)束標(biāo)志:EOF(end of file)
(5)fgetc()/fputc()
fgetc(文件指針)罗标; //從給定文件中讀取一個(gè)字符
fputc(ch,文件指針); //添加一個(gè)字符到指定文件中
(6)fgets()/fpus()
fgets(字符數(shù)組/字符串常量/指針闯割,size,fp);
從fp獲得size-1個(gè)長度彻消,在末尾加'\0'
碰到EOF或者換行符結(jié)束
fputs(arr,fp);
將字符串寫入到文件fp中
stdin:標(biāo)準(zhǔn)輸入 鍵盤
stdout:標(biāo)準(zhǔn)輸出 終端
stderr:錯誤輸出 終端
(7)fascanf(fp,"格式",參數(shù)列表); //讀文件
<--------------
fprintf(fp,"格式",參數(shù)列表); //寫文件
-------------->
寫入文件的時(shí)候是什么格式,讀出來就是什么格式宙拉,不然會出錯
(8)fread()/fwrite() //塊讀寫
fread(address,size,count,fp); //讀
<-------------
fwrite(address,size,count,fp); //寫
-------------->
adress:地址
size:大小---->sizeof()/或者具體數(shù)值
count:讀寫的塊數(shù)(一般情況下默認(rèn)1)
fp:文件指針