C 複習筆記

2021-10-01 21:22:25 字數 4958 閱讀 1365

一:

1、 資料的型別

型別 型別識別符號 位元組數 數值範圍

整形 int 4 正負21億多

無符號整形 unsigned [int] 4 0-42億

短整型 short [int] 2 正負3萬

無符號短整型 unsigned short [int] 2 0-6萬多

長整形 long [int] 4 正負21億

字元型 【signed】char 1 -128-127 (相減ascii表)

無符號字元型 unsigned char 1 0-255

單精度型 float 4 3.4*10-38

雙精度 double 8 10的正負308次冪(同下)

長雙精度型 long double 8 10的正負308次冪(數大時會以科學計數法的形式輸出)

2、 轉義字元:

\n 換行 \t 相當於tab \b 向前移一列

v/ 豎向跳格 \反斜槓符、\』 單引號字元 \」 雙引號字元

3、符號常量: define a 30 這不是語句,不加分號

4、%運算子只能使整形

5、?:運算子 x>y?x:y; 真返回x,假返回y。(ch>=』a』&&ch<=』z』)?(ch+32):ch;

6、輸出的控制:

一:通過iomanip標頭檔案控制

hex以16進製制輸出,,,,,,,,,oct以8進製輸出

setfill()設定填充字元,預設為0;

setprecision(n) 在fixed條件下n代表小數個數,在非fixed條件下n表示有效數字

setw(n) 設定字元寬度

setiosflags(ios::fixed) 固定小數

setiosflags(ios::left/right) 左/右對齊

setiosflags(ios::scientific) 設定浮點數以科學計數法顯示,只對浮點數和雙精度有效

7、關係運算子,如》=,優先度高於賦值,低於算數

如:c>a+b === c>(a+b) ab(bfor

(int i=

1;i)//或者i=0,j}}

}}}17、二維陣列:按行列對二維陣列全部元素賦值,也可以全部寫在乙個大括號裡,依次賦值,也可以部分賦值,其他預設初始化為0.

二維陣列做引數時,第二維不可以省略

18、字元陣列,一次性輸入加\0,單個字元輸入不加\0,

19、getline, get , put , getchar 的應用

20、reserve逆序函式

21、stract 連線函式,strcpy 複製函式, strcmp 比較函式, strlen 長度函式

22、string, 可以直接+、-、比較大小等。

23、指標,指標做函式引數,,不能通過函式形參改變指標的指向。若想改變,使用指標的指標即可。

24、指向陣列的指標,*(p+i)==p[i]a[i]----(pa)

指向二維陣列的指標 int(*p)[4],p=a; 必須知道列數才可。也可以用二維指標或指標陣列用new開闢空間來乙個個賦值;

25、指向函式的指標:函式型別(*變數名)(函式形參表)

such: int(*p)(int a,int b) 運用:p=add; (無取址符,無括號) ,p(a,b);

指向成員函式的指標: int (student::*p)(int a,itn b) , 即在空號內加上類名和作用域。

運用 p=&student::add; (函式名後不加括號) ,(t.p)(); t為物件名,因為的優先順序小於(),故必須在t.p上加括號。

26、返回指標值的函式: 型別名函式名(引數列表) such: int *mymax(int a,int b)

27、指標陣列,陣列元素是指標 int *p[4];

28、二維指標(即指向指標的指標)int **p=&p1;

29、指向常量的指標:const int *p; 不可以通過指標改變物件的值

30、常指標: char const p; 指標的指向不可改變,必須在定義時初始化

31、指向常量的常指標, const char const p=&a;

32、void型別的指標,可以把非void型別的指標強制轉化為void型別的指標,也可以把void型別的指標強制轉化成其他型別進行賦值。char p1=」dawda」;void p2;p2=(void)p1; -----注意是void

33、引用,引用傳參可改變實參值,乙個引用指向不可再改變,不能建立引用的引用,不能建立引用陣列,但可以取引用的位址。–定義引用時必須要初始化(做引數時除外)。

34、結構體 struct a; 注意後面加分號,可以在大括號後直接定義物件,,結構體陣列 a a[n];

35、結構的賦值是淺賦值,如果有指標,還要手動賦值。(我不會)

36、指向結構體的指標,a *p=&stu,呼叫 (*p).num或者p->num; 可用於構造簡單鍊錶。

37、new的幾種用法:int *p=new int ; 開闢乙個存放整形的空間,返回乙個位址

int *p=new int(100) ; 開闢乙個存放整形的空間,是該數的初值為100

char *p=new char [10]; 開闢乙個一維陣列

a *p=new a; 開闢乙個儲存結構體的空間

38、列舉型別,enum weekday; 套式:enum 名字 ; (注意分號) 列舉元素的值是固定的,預設從0開始遞增,不可修改,可以在定義時初始化值,如enum weekday,由於未對tue賦值,預設從mon遞增,故tue=2。定義列舉變數 weekday a; 只能把列舉常量的值賦給列舉變數,如:a=sun;或者強制轉換賦值:a=weekday(2);

39、用typedef宣告新的型別名,如typedef int intmy,intmy可以當int用

typedef int num[100], num n, n是容量為100的整型陣列

如果用typedef定義新的struct名,只能定義特定的結構體名,如:

typedef structdate; //date是新的型別名,不是變數

date a; 定義變數,其實就是相當於struct a;

40、類的資料如果不宣告作用域,預設為私有的。

41、內建成員函式:inline void display();-------inline void student::display(){}

若是在類內定義函式,且函式不含有迴圈等控制結構,系統將其預設為內建函式。

42、含預設引數的函式(在呼叫時可以傳入小於總引數個數的引數)預設引數以函式宣告時為準。 void set(a &t,int hour1=0,int minute1=0,int sec1=0) ------set(a,10);

43、建構函式:一:函式式定義

二:引數初始化表: box::box(int a,int b,int c) : height(a),with(b)

三:使用預設引數的函式函式。

四:建構函式多次過載(不可出現歧義),如全參預設函式和無參函式。

44、析構函式:靜態物件只有在main函式結束後才釋放,故需要執行析構函式

兩者關係:先構造後析構,後構造先析構;

45、常物件: time const t; 或者是 const time t; t中所有資料成員的值都不能被改變。

如果乙個物件被宣告為常物件,那只能通過此物件呼叫常成員函式,不可呼叫普通成員函式

46、常成員函式: void display()const; //將函式宣告為常成員函式,它可以訪問常物件中的資料成員,但不可以修改,如果必須要修改某個值,可以將其定義為可變的成員函式:

mutable int count; 這時候可以通過常成員函式該變count的值。

47、指向物件的常指標: a *const p; p=&t1; ,指標的指向不可改變

48、複製建構函式,又稱拷貝建構函式,用於建立新的物件,書寫:box::box(const box b);

系統會預設乙個淺複製的函式,如果有指標的話,使用預設的函式會使兩個指標指向同一位址。建立深拷貝建構函式,注意一定要加引用,const可以不加。賦值也是用的拷貝建構函式

49、靜態資料成員: static int height; 只可以在類外進行初始化: int bos::height=0;

套式:型別名 類名::資料成員名 = 初值

靜態成員函式:static int add();

靜態資料成員和靜態成員函式都是類的一部分,而非物件的一部分,即所有物件引用的靜態資料都相同,可以通過域運算子直接引用,如box::height-------box::add();

50、友元函式—直接friend void display(),

友元成員函式 (常需要在作另乙個類的宣告)在另乙個類:friend void time::display();

需要注意的是友元成員函式要在最後乙個類後定義,因為函式要用到後面類對成員

友元類 在b中寫friend a;注意a中要用到b中成員的函式都要在b後面定義

51、類模板 template 注意類模板要在每一次用時宣告,即在每一次定義函式時宣告,而且在類外定義是:compare::compare(a a,a b),類內則不需要,

運用: box a; 可以同時有多個模板 template;在定義物件是分別加入型別名:box a;

52、轉換建構函式,只能有乙個引數,把其他型別的引數改為類的物件型

53、繼承和派生是從不同的角度對同意現象的說法,從父類來看,子類是派生,從子類來看是繼承 繼承的宣告 class a: public c;繼承分為私有,公有和保護繼承

訪問屬性表:

公用繼承	保護繼承	私有繼承
68、對二進位制檔案的操作

如:outfile.write((char*)&stud[i],sizeof(stud[i]));

通式:istream&read(charbuffer,int len) ostream&write(charbuffer,int len); 區分ofstream和ostream.

buffer指指標, a.write(p,10);

69、檢錯程式 if(!outfile)

C 複習筆記

很久沒有碰c 下個專案要開始使用c 所以很多東西需要撿起來重新看看。從今天起記錄一些筆記,方便自己今後查閱。言歸正傳,先從建構函式的初始化列表說起。我把這個知識點細化成3個問題,1.為什麼要有初始化列表,它和建構函式中初始化有什麼不一樣。2.初始化的順序。3.一些注意的細節。先說第乙個問題。我們有兩...

C 學習筆記 複習筆記

1.靜態成員 1 在c 沒有全域性函式,static函式相當於全域性函式 2 靜態函式不支援this指標 3 靜態函式的引數必須是靜態的 4 靜態建構函式在生成物件前完成一些工作 5 靜態類不能例項化 靜態類是密封的,不能派生 不能包含非靜態成員 11.如果物件要控制非託管的資源,用完後或釋放資源,...

C 複習筆記(3)

static void main string args while guess number console.writeline you are correct and it only took you guesses guesses ps 如果應用程式在乙個較快的計算機上執行,則該計算機的系統時...