C語言學習總結 四 剩餘內容

2022-08-30 00:51:13 字數 3435 閱讀 1480

(預處理指令,巨集定義,條件編譯,檔案操作)

簡單的來說就是在程式編譯之前需要做的事情

概念:是乙個替換**的預處理指令,可以在編譯之前進行**替換(巨集展開,條件編譯,檔案包含).

當需要用一些重複性**或簡單的函式運算時,可以用巨集定義.提高效率

用法:開始替換: #define 被替換內容  替換成的內容

如:#define ka1 6

表示從這行開始下面所有**中的ka1 替換成6

結束替換:

#undef 被替換內容

如: #undef  ka1   表示到一行, 巨集定義失效

特點:命名盡量以大寫或小寫k開頭.便於區分.(規範)

被雙引號的引起來的不會被替換

巨集定義只會做**替換,不會關注任何邏輯,容易出現優先順序錯誤(加括號解決).

替換可以設定作用域.如果不設定,作用域則是這行**出現到**的最後一行.

概念:是乙個根據條件編譯**的預處理指令,可以讓一段**只在滿足條件才編譯.提高編譯效率

使用: 

#if 條件表示式 

#elif 條件表示式  

#else

與巨集定義相關: 

#ifdef 巨集名 表示定義了巨集 

#ifndef 巨集名 表示沒有定義巨集

#endif 結束條件編譯.注意一定要加.

四,什麼時候用? 

當一些**只需要在一定條件下編譯時.

五,有什麼特點?

1.條件編譯不能訪問需要編譯後才能執行的**.

2.條件編譯不需要用大括號,所以必須加上結束標識,否則涵蓋下面的所有**.

3.條件編譯一般跟巨集定義配合使用,防止重複包含及交叉包含.

一,是什麼? 

是c語言中以.h結尾的檔案,如stdio.h . 

二,有什麼用?

用於聲名(描述)乙個函式,把多個**檔案(如a.c;b.c;…)中的函式,宣告在這個檔案中,以便於重用 、防止定義的衝突. 

三,怎麼用? 

定義:   新建乙個以.h結尾的檔案,把需要用到的函式的聲名直接放在裡面. 

引用:   自定義的標頭檔案:#include  「頭檔名.h」 

編譯器類庫里的標頭檔案:#include  《頭檔名.h> 

四,什麼時候用?  

當程式需要由多個c檔案組成時. 

五,有什麼特點? 

1.在標頭檔案中僅做聲名,不做具體實現 

2.在標頭檔案有聲名只能確保編譯成功成.o檔案;但不確保能鏈結成功. 

3.自定義的標頭檔案引用時必須要有路徑. 

一,是什麼? 

是c語言中的乙個預處理指令. 

二,有什麼用? 

用於把乙個檔案的內容拷貝到這行命令所在的位置. 

三,怎麼用? 

引用:  自定義的檔案:#include  「檔案路徑和名稱」 

編譯器類庫里的檔案:#include  《檔名》

四,什麼時候用?  

當程式需要用到別的檔案時. 

概念:是對檔案或檔案內容的輸入(讀)與輸出(寫). 檔案操作的函式在中聲名.

檔案的操作流程:

1)匯入標頭檔案 stdio.h

2) 定義檔案指標

3)開啟檔案

4)操作檔案

5)關閉檔案 

操作原理:

3、檔案指標

file 結構體

file *fp; 結構體指標

作用:儲存乙個檔案的首位址,指向乙個檔案 

4、檔案的開啟和關閉

開啟 fopen(檔名,操作方式);

fopen("a.txt","r");

目- cmassyrpkwjxularuygrjqhojbwj/build/products/debug

操作方式:

rwab+t  : 讀寫追加二級制讀寫文字   

w -- 寫入檔案的時候,如果檔案不存在,則建立存在則覆蓋

r+ w+ wb+ a+

關閉檔案:  fclose(檔案指標);

5、檔案操作的函式

1) 字元型資料的讀取和寫入

寫入:fputc('字元',檔案指標);

char c='a';

fputc(c,fp);

讀取:char ch = fgetc(fp); 2)字串型別資料的讀取和寫入

寫入:fputs(陣列名/指標名,fp); //fputs(陣列名,stdout);

讀取:fgets(陣列名/指標名,長度,fp);

fgets實際讀取的字元個數是長度-1

1)遇到\n 結束,遇到eof也會結束

3)資料塊的讀取和寫入

寫入: 

fwrite(寫入的變數位址,資料塊的大小,塊數,fp);

int a =123;

fwrite(&a,sizeof(int),1,fp);

struct student stu1;

fwrite(&stu1,sizeof(struct student),1,fp);

讀取:struct student s1;

fread(變數的位址,資料塊的大小,塊數,fp)

fread(&s1,sizeof(struct student),1,fp); //使用s1進行輸出

4)格式化的讀取和寫入

寫入資料和讀取資料按照一定的格式進行

寫入:fprintf(檔案指標,"格式化的字串",變數列表);

fprintf(fp,"%d,%c,%d#",10,'a',20);

10,a,20#10,a,20#10,a,20#

讀取fscanf(fp,"%d,%c,%d#",&a,&ch,&b);

fprintf(fp,"%d,%s,%d",20,"abc",30);

fscanf(fp,"%d,%s,%d",&a,str,&b);

str = abc,30

改成:fprintf(fp,"%d,%d,%s",20,20,"abc"); 

fscanf(fp,"%d,%d,%s",&a,&b,str);

6、檔案的隨機讀取

設定檔案的頭指標的位置

預設fp是指向檔案的首位址

1)rewind(fp); //fp指向首位址

2)fseek(fp,偏移的距離,起始點);

fseek(fp,32l,seek_set); //從檔案頭部開始,偏移32個位元組

7、檔案的檢測函式

feof() 用來檢測檔案是否到了末尾

如果沒有到末尾 0

到末尾 1

缺點:多執行一次 

特點:1.開啟檔案的模式限定操作的方式.

2.開啟操作檔案後一定要關閉檔案,否則容易引起記憶體洩漏.

3.輸入與輸出是相對於操作者而言.

C語言學習內容總結2017 11 7

生存期 針對程式的執行過程。2.在c語言中函式是最小的執行單位。結構體可以進行巢狀定義,但函式不能進行巢狀定義。3.在c語言中其他函式的定義必須放在主函式 主調函式 的前面,或者將其他函式的宣告放到主函式的前面。否則編譯不通過。下面一段 原始檔1中的 include include 標頭.h voi...

C語言學習內容總結2017 11 21(結構體)

1.結構體 下面一段 include using namespace std void main 直接在函式裡面定義 結構體就是在設計新的型別。結構體的寫法如下 struct student 設計學生 結構體 的屬性。對結構體變數的賦初值 int main 那麼為什麼不能在定義結構體的時候對結構體裡...

C語言學習總結

1 c語言中有乙個賦值表示式,是其他多數高階語言中沒有的。2 c 語言的輸入與輸出操作是由函式來完成的,它不提供輸入輸出語句。3 c語言中有乙個共用體,其變數所點記憶體長度是其最長 成員變數的長度。4 static char a language char p a 8 5 void main int...