C++學習筆記(一)
阿新 • • 發佈:2020-10-16
文章目錄
一、C++簡介
1、起源
二十世紀八十年代初貝爾實驗室。
2、應用範圍
文書處理程式、編譯器、作業系統、大型遊戲等。
3、從C到C++
- C是結構化和模組化的語言,面向過程,未完全實現解決軟體設計危機的目標。
- C++保留了C原有的所有優點,對C的功能進行了擴充,增加了面向物件的機制。
注:C++對C的擴充
①變數的定義可以出現在程式中的任何行;
②提供了標準輸入輸出流物件cin,cout;
③用const定義常變數;
④函式過載、函式模板、帶預設值的函式;
⑤應用型別;
⑥單目作用域運算子;
⑦string型別字串;
⑧使用new和delete代替malloc和free函式等。
4、C++開發工具
- 記事本(Notepad++)+命令列、
- Visual C++ 6.0、
- VS(Visual Studio)2015(功能強大,體積龐大)、
- CodeBlocks(開源免費,專業推薦)、
- 其他(DEV C++、CLion、C-Free、Xcode、C4droid)。
5、C++程式碼規範
二、C++基礎語法
1、常用資料型別
2、變數
(1)變數的概念
變數就是一塊記憶體空間;
——通過變數可以簡單快速的找到記憶體中儲存的資料。
(2)變數的命名
變數名只能由字母、數字、下劃線三種字元組成;
第一個字元必須為字母或下劃線。
(3)變數的宣告和使用
- 資料型別 變數名;(宣告變數)
- 資料型別 變數名=值;(定義時初始化變數)
- 資料型別 變數名;變數名=值;(定義後初始化變數)
3、運算子
(1)運算子的種類
- 算數運算子
- 轉義運算子
- 關係運算符:>、<、>=、<=、==、!=(C++中引入布林型別,true表示真,false表示假。)
- 位運算子:&、|、~、^(異或)、<<(左移)、>>
- sizeof運算子:可以獲得資料型別佔用記憶體空間的大小。s加粗樣式izeof(type_name);結果以位元組為單位。
…
(2)運算優先順序
- 括號優先順序最高;
- 單目運算子優先級別高,賦值運算子優先級別最低;
- 從右向左結合性的只有賦值運算子、三目運算子和單目運算子;
- 算數運算子>關係運算符>邏輯運算子。
4、結構體
- 條件if/switch、
- 迴圈while/do-while/for、
- break(跳出迴圈,執行迴圈之後的語句)、
- continue(跳過本次迴圈,繼續下次迴圈。
…
5、陣列
(1)什麼是陣列?
——陣列是一個變數(一塊記憶體空間),由資料型別相同的一組元素組成(一塊連續的記憶體空間)。
(2)陣列的結構和基本要素
識別符號、陣列元素、元素下標、元素型別。
(3)陣列的替代品
6、指標(pointer)
(1)什麼是指標?
——指標是一個值為記憶體地址的變數(或資料物件)。
強烈建議初始化所有的指標,並儘可能在定義了物件之後再定義指向它的指標。
(2)指標的基本用法
——資料型別 * 指標變數名。
注:
- int* p的寫法偏向於地址,即p就是一個地址變數,表示十六位地址;
- Int *p的寫法偏向於值,*p是一個整形變數,能夠表示一個整型值;
- 宣告中的號和使用中的號含義完全不同。
(3)特殊型別指標
- 空指標(null pointer)——不指向任何物件,在試圖使用一個指標之前可以首先檢查是否為空。
- void*指標——種特殊的指標型別,可以存放任意物件的地址。
(4)陣列與指標
- 陣列名就是這塊連續記憶體單元的首地址——num與&num[0]的值相同;
- 陣列第i+1個元素可以表示為:①地址:&num[i + 1]或num + 1;②值:num[i + 1]或*(num + i + 1)或*++num
- 為指向陣列的指標賦值:int * ptr_num = num;
- 指標變數可以指向陣列元素:int * ptr_num = &num[4]。
7、引用(reference)
(1)引用的概念
- 引用即別名,並非物件,引用只能繫結在物件上;
- 引用更接近const(常量)指標,一旦與某個變數關聯起來,就將一直效忠於他;
- 將引用變數用作引數時,函式將使用原始資料,而非副本;
- 當資料所佔記憶體較大時,建議使用引用引數。
- 返回引用:不要返回區域性變數的引用;函式可以不返回,預設返回傳入的應用物件本身。
(2)指標與引用
- 引用對指標進行了簡單封裝,底層仍然時指標;
- 獲取引用地址時,編譯器會進行內部轉換。
(3)使用引用引數的一些指導原則
8、動態分配記憶體
- 使用new動態分配記憶體;
- 使用delete釋放記憶體。
例:動態分配的陣列
Int * intArray = new int[10];(new運算子返回第一個元素的地址)
Delete [] intArray;