1.定義鏈表
struct student
{
int ID;
char name[32];
struct student* next;//存儲(chǔ)下一個(gè)節(jié)點(diǎn)的地址
};
//頭節(jié)點(diǎn)
//malloc給指針分配內(nèi)存空間,將malloc得到的空間地址賦值給head
struct student *head=(struct student *)malloc(sizeof(struct student));
head->next=NULL;
//插入節(jié)點(diǎn)
struct student *temp=(struct student *)malloc(sizeof(struct student));
temp->ID=12;
strcpy(temp->name,"zhang");
temp->next=NULL;
malloc()/free()
成對(duì)出現(xiàn)
雙釋放易出現(xiàn)段錯(cuò)誤
STU* p=(STU*)malloc(LEN);//一個(gè)malloc對(duì)應(yīng)一個(gè)free匿醒,
STU *pa=p;
free(p);
free(*pa);
p=NULL;
pa=NULL;
棧:
局部變量啥繁,程序運(yùn)行期間的變量分配大部分是棧空間分配青抛;
函數(shù)結(jié)束后,系統(tǒng)自動(dòng)回收資源酬核,空間比較忻哿怼;
堆:
堆空間比較大嫡意,可以由程序員自由支配举瑰,只能手動(dòng)申請(qǐng)和釋放,
malloc申請(qǐng)的空間在堆上蔬螟。
malloc()和free()成對(duì)出現(xiàn)此迅,(即申請(qǐng)的堆空間要及時(shí)釋放)
防止出現(xiàn)堆空間不足現(xiàn)象
3、段錯(cuò)誤:
指針:
常量指針/NULL/野指針
數(shù)組:
數(shù)組越界訪問旧巾,訪問到非法區(qū)域或者修改了其他變量
其他:
內(nèi)存不足
雙釋放
內(nèi)存泄露
遞歸層次太深
4.棧和隊(duì)列
棧:先進(jìn)后出
壓棧:push()
出棧:pop()
隊(duì)列:先進(jìn)先出
5.宏
#define LEN sizeof(STU)
#undef LEN //取消宏定義
(1)條件預(yù)編譯
#if 表大式
//執(zhí)行語句
#else
//執(zhí)行語句
#ednif
6耸序、文件
-:普通文件
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(文件指針);
注:
文件使用完畢后鲁猩,如果不關(guān)閉坎怪,會(huì)造成數(shù)據(jù)丟失。
文件指針:
文件指針結(jié)構(gòu)體:FILE ---->#include<stdio.h>中
好漢了文件的基本信息
定義文件指針:
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屬性的隔箍,文件必須存在!=畔纭蜒滩!
7滨达、文件的操作
fgetc()/fputc():字符讀寫函數(shù)
fgets()/fputs():字符串讀寫函數(shù),按行讀取
fscanf()/fprintf:格式化讀寫函數(shù)********讀寫格式要嚴(yán)格一致
fread()/fwrite():塊讀寫函數(shù)*******
注:
重點(diǎn)掌握fscanf()/fprintf()或者fread()/fwrite()至少掌握一種
在C89標(biāo)準(zhǔn)中,fread()/fwrite()有bug
文件結(jié)束標(biāo)識(shí):EOF(end of file)
5.fgetc()/fputc():字符讀寫函數(shù)
fgetc()俯艰;//從文件中讀取一個(gè)字符
fputc(字符捡遍,文件指針);//添加一個(gè)字符到指定文件
6.fgets()/fputs()
fgets(字符數(shù)組/字符串常量/指針,size竹握,fp)
從fp獲得size-1個(gè)長度画株,在末尾添加‘\0’
碰到EOF或者換行結(jié)束
fputs(arr,fp)//arr可以是字符數(shù)組或者字符串常量
將字符串寫入到文件fp中
stdin: 標(biāo)準(zhǔn)輸入---->鍵盤
stdout: 標(biāo)準(zhǔn)輸出----->終端
stderr: 錯(cuò)誤輸出------>終端
7.fscanf()/fprintf();
fscanf(fp,"格式",參數(shù)列表)啦辐;//按一定格式寫文件
<----------------
fprintf(fp,"格式"谓传,參數(shù)列表);//按一定格式讀文件
---------------->
8.fread()/fwrite()
fread(adress,size,count,fp);//讀
<-------
fwrite(adress,size,count,fp);//寫
------->
adress:地址
size:大小---->sizeof()//或具體的數(shù)值
count:讀寫的塊數(shù),一般情況下默認(rèn)1芹关;
fp:文件指針
總結(jié):文件系統(tǒng)的內(nèi)容不難续挟,需要掌握鏈表的寫入和讀出