現在我開始重學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...