棧:
局部變量,程序運(yùn)行期間的變量分配大部分是在??臻g分配,
函數(shù)結(jié)束后,系統(tǒng)自動回收資源,空間比較小,
堆:
堆空間比較大,可以由程序員自由支配,只能手動申請和釋放
malloc申請的空間在堆上!
malloc()和free()要成對出現(xiàn)(即申請的堆空間要及時釋放),
防止出現(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()由BUG!??!
文件結(jié)束標(biāo)志:EOF(end of file)
(5)fgetc()/fputc()
fgetc(文件指針); //從給定文件中讀取一個字符
fputc(ch,文件指針); //添加一個字符到指定文件中
(6)fgets()/fpus()
fgets(字符數(shù)組/字符串常量/指針,size,fp);
從fp獲得size-1個長度,在末尾加'\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ù)列表); //寫文件
-------------->
寫入文件的時候是什么格式,讀出來就是什么格式,不然會出錯
(8)fread()/fwrite() //塊讀寫
fread(address,size,count,fp); //讀
<-------------
fwrite(address,size,count,fp); //寫
-------------->
adress:地址
size:大小---->sizeof()/或者具體數(shù)值
count:讀寫的塊數(shù)(一般情況下默認(rèn)1)
fp:文件指針