C C 學習要點總結(未整理)

2021-06-15 21:25:34 字數 3655 閱讀 3112

c/c++學習要點總結(未整理)

1. 記憶體對齊問題(struct a; //sizeof(a)=16

2. continue語句的使用

3. 拷貝建構函式的作用

4. 多繼承且有內嵌物件時的建構函式

派生類名::派生類名(基類1形參,基類2形參,...基類n形參,本類形參):基類名1(引數), 基類名2(引數), ...基類名n(引數),物件資料成員的初始化

;5. void f() const ->const 表明f不能改變類的成員變數的值

6. 運算子過載

ostream& operator<< (ostream &os, a &a)

7. 使用free或delete釋放了記憶體後,沒有將指標設定為null。導致產生「野指標」

8. 棧是向低位址擴充套件的資料結構

堆是向高位址擴充套件的資料結構

9. static 宣告的變數/函式是有作用域的全域性變數和函式。

static 最大的作用在於控制訪問

在c中如果乙個函式或是乙個全域性變數被宣告為static,那麼,這個函式和這個全域性

變數,將只能在這個c檔案中被訪問,如果別的c檔案中呼叫這個c檔案中的函式,

或是使用其中的全域性(用extern關鍵字),將會發生鏈結時錯誤。這個特性可以用於

資料和程式保密。

10. 遇到typedef時,從左到右進行掃瞄,找到第乙個「陌生」的標誌符,這個標誌符就應該是語句所宣告的型別名稱。

11. typedef char * pstr;

int mystrcmp(const pstr, const pstr);

我們希望表達的是int mystrcmp( const char*, const char* )

2個指向常量 char的指標

可它被解釋後的實際表示式變成了:int mystrcmp( char* const, char* const ) 2個指向char的常量指標

const修飾的是pstr,而pstr代表了char *不是char,也就是把指標轉換為常量 

12. const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有乙份拷貝,而#define定義的常量在記憶體中有若干個拷貝。

編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

13. char a[10];

strlen(a);

未初始化 '/0' 的位置是隨機的 所以strlen(a)的值是不定的

14. 智慧型指標不能用於陣列

智慧型指標是個物件 只不過就有指標的功能

智慧型指標不能和stl混用,當智慧型指標做實參傳遞給函式時,函式返回時智慧型指標自動釋放。

15. 右左法則----複雜指標解析

16. c語言可以有三種方法定義乙個常量:#define、const和列舉,但只有列舉才是真正的常量,什麼是真正的常量?真正的常量是沒有儲存空間的,是乙個右值,這意味著通過任何合法的手段也不會被修改

17. stl:

stl提供

6大元件,彼此可以組合套用: 1.

容器(containers):

各種資料結構,如

vector

、list

、map

等,用來儲存各種資料。 2.

演演算法(algorithms):

各種常用的演算法,如

sort

、search

、copy

等,它的作用是為提供各種常用的操作。 3.

迭代器(iterators):

乙個非常重要的元件,用來將容器和演演算法聯絡起來。也就是通常所說的泛型指標。 4.

仿函式(functors):

行為類似函式,可作為演演算法的某種策略

(policy)。

5. 配接器

(adapters):

一種用來修飾容器或仿函式介面的東西。 6.

配置器(allocators):

負責空間配置與管理,用來保證容器空間的正確分配。

容器:1.序列容器 2.關聯容器 3.容器介面卡

標準的連續記憶體容器是vector、string和deque

表現為鍊錶的容器——比如list和slist——是基於節點的,所有的標準關聯容器也是(它們的典型實現是平衡樹)

是隨機訪問迭代器,在技術上只能限於vector、deque和string

18. cin cout cerr(無緩衝) clog(帶緩衝)

19. 清空緩衝 flush endl

20. 記憶體對齊

在預設情況下,vc規定各成員變數存放的起始位址相對於結

構的起始位址的偏移量必須為該變數的型別所占用的位元組數的倍數

vc 中提供了#pragma pack(n)來設定變數以n位元組對齊方式

21. bss段和.data段的區別 :兩者的區別在於:全域性的未初始化變數存在於.bss段中,具體體現為乙個佔位符;全域性的已初始化變數存於.data段中;而函式內的自動變數都在棧上分配空間。.bss是不占用.exe檔案空間的,其內容由作業系統初始化(清零);而.data卻需要占用,其內容由程式初始化

22. 當表示式中存在有符號型別和無符號型別時所有的運算元都自動轉換為無符號型別

23. int型變數迴圈左移k次

a=a<>16-k

(設sizeof(int)=2 * 8 = 16)

int型變數a迴圈右移k次

a=a>>k|a<<16-k

(設sizeof(int)=2 * 8 =16)

對2的倍數取模:

類似上面的方法。對2的倍數取模,只要將數與2的倍數-1做與運算就可以了。如:

a % 8 = a & 8-1

節省乘除法可以提高效率。

24. 合理結構體成員定義順序:按照型別從小到大,相同型別連續存放

25. 陣列名是乙個位址,而且,還是乙個不可修改的常量,完整地說,就是乙個位址常量。陣列名跟列舉常量類似,都屬於符號常量。陣列名這個符號,就代表了那塊記憶體的首位址。注意了!不是陣列名這個符號的值是那塊記憶體的首位址,而是陣列名這個符號本身就代表了首位址這個位址值,它就是這個位址,這就是陣列名屬於符號常量的意義所在。由於陣列名是一種符號常量,因此它是乙個右值,而指標,作為變數,卻是乙個左值,乙個右值永遠都不會是左值,那麼,陣列名永遠都不會是指標!

26. 在c

程式中,用非0

的數表示邏輯值"真

"。27.使用前向引用宣告雖然可以解決一些問題,但它並不是萬能的。需要注意的是,儘管使用了前向引用宣告,但是在提供乙個完整的類宣告之前,不能宣告該類的物件,也不能在內聯成員函式中使用該類的物件。請看下面的程式段:

class fred;    //

前向引用宣告

class barney ;

class fred ;

應該記住:當你使用前向引用宣告時,你只能使用被宣告的符號,而不能涉及類的任何細節

28. // 賦值函式

string & string::operate =(const string &other)

printf("/bb/n");

}

學習記錄 指標(未整理)

1.指標是什麼?指標就是記憶體的位址,指標變數就是能夠儲存記憶體位址的變數。一般資料型別變數名指的是這個資料所代表的值。2.如何定義指標?在最開始宣告乙個指標變數的時候,為了表明是乙個指標變數,要在變數名前加 間接引用符 在後續的使用中則不用加 了 下面兩種寫法是等價的 乙個變數 inta 第一種,...

本科階段學習經驗分享(未整理)

其實我覺得自己的大學生活有些曲折的,沒有別人想象得那麼順利,六個方面分享一下經驗 未整理 學好課程 數學 專業課 英語 大一階段最重要,大一績點高的話,之後才有動力學習,學好。大一掛科,績點低的話,之後也就沒動力了,愛咋咋樣了。專業基礎課,比如高數,線性代數,都是為以後的專業課打基礎,概率統計要用到...

c c 陣列學習總結

陣列是把相同格式型別的資料元素組合到一起的的容器或者說是工具。有了陣列這個工具,我們的 和程式設計工作變得極為方便,不用乙個乙個定義資料了。乙個陣列在記憶體中佔據一片連續的儲存單元。陣列包含一維陣列和多維陣列。一 陣列知識總結及使用過程中的注意事項 1 陣列大小必須是指值為正的常量,不能為變數。一旦...