c 讀書筆記

2022-04-04 07:17:27 字數 1420 閱讀 1999

現在我開始重學c++,為什麼要學呢?不知道,也許心血來潮吧!反正技不壓身。我要記讀書筆記,這個原因我知道,因為學c#的時候都沒記,好後悔!所以不能再後悔!言歸正傳

1.記憶體管理

記憶體分配方式有三種:

(1)從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。

(2)在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

(3)從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意多少的記憶體,程式設計師自己負責在何時用free或delete釋放記憶體。動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多。

2.陣列與指標的區別:

陣列要麼在靜態儲存區建立(如全域性陣列),要麼在棧上建立,其位址和容量在生命週期內保持不變,只有其內容可變。而指標可以指向任何記憶體塊,它的特徵就是可變,所以我們常用指標來指向動態記憶體塊。

3.常量指標與指標常量:

常量指標宣告:const int *p或int const  *p

int a=3;      int  b=4;   const int *p=a;    *p=5;//錯誤,因為指標p指向的內容型別變為const型     a=4;//正確,可以這樣改變a的值       p=b;//正確,p儲存的位址可以變

指標常量宣告:int  *const p

int  a=3;    int b=4;    int *constp=a;//初始化是必須的   p=b;//錯誤,因為不能改變const型別指標  *p=6;//正確,指標指向內容可以變。

4、c++中string物件的+操作符的左右運算元必須至少有乙個是string型別的,為什麼呢?

答:因為只有在左運算元是該類型別的物件時,才會考慮使用作為類成員的過載操作符。

5、客串一下c#中string型別,眾所周知:c#中string型別是引用型別,又眾所周知:值型別如果附值的時候,是把自己的乙個副本附給另乙個變數,之後它們互不影響。而引用型別則是把它在堆疊中的位址複製乙份給另乙個變數,它們的指向仍是一樣的,所以當對乙個變數進行操作的時候會影響到另外乙個變數。但下面**怎樣理解:

using

system;

using

system.collections.generic;

public

class

myclass

,",a,s);}} 

如果你對string型別理解不深,會讓你暈倒轉向,乙個引用型別怎麼會表現出值型別的特徵?我讓msdn告訴你答案::「string 物件稱為不可變的(唯讀),因為一旦建立了該物件,就不能修改該物件的值。看來似乎修改了 string 物件的方法實際上是返回乙個包含修改內容的新 string 物件。」

明白了吧!

C 讀書筆記

1.內建函式 inline必須在呼叫前進行完整定義,語 define相同,但是消除了不安全性 例 inline float circle float r 2,函式原型 語法形式 返回型別 函式名 參數列 1 函式原型的參數列中不包含引數的名字,而只包含型別 2 函式定義由函式說明部分和函式體構成 3...

C 讀書筆記

c陷阱和缺陷 1.賦值符優先順序比邏輯比較低,賦值表示式的結果為賦值後的結果 2.編譯器掃瞄符號使用貪心法,盡量選擇最長字元的符號串,如a 理解為a 而不是a 3.為相容老版本編譯器,不同符號之間最好加空格,如a 1可能理解為a 1,應該改為a 1 4.老版本編譯器,8進製數以0開始,後面可以加超過...

c 讀書筆記

再看一本叫做 stl lectures 的書,裡面有一段 讓我學習了 include includeusing namespace std template const t max const t x,const t y int main 我說這段 讓我學習,不是說它寫的多好 因為這段 在g 4.8...