c primer 第九章 記憶體模型和命名空間

2021-08-26 18:32:02 字數 1888 閱讀 3706

一,單獨編譯

1)請不要將函式定義或變數宣告放到標頭檔案中。

原因:乙個標頭檔案中包含乙個函式定義,然後其他兩個檔案(同屬於乙個程式)包含該標頭檔案,則同乙個程式中將包含同乙個函式定義。除非函式是內聯的(inline),否則將出錯。

2)將結構放在標頭檔案中是可以的。因為它們不建立變數。

3)標頭檔案寫法: 「main.h」 標頭檔案包含在雙引號中則編譯器首先查詢當前的工作目錄。

包含在尖括號中則在儲存標準標頭檔案愛你的主機系統的檔案系統中查詢

4)原始碼檔案:**.c 不需要#include **.c 因為這樣將導致重複宣告

5)預處理器編譯指令 #ifndef node

#define node 23

#endif

二,儲存持續性、作用域和鏈結性

1)自動儲存持續性(函式定義中宣告的變數)

靜態儲存持續性(函式定義外定義的變數和static定義的變數)

動態儲存持續性(new操作符分配的變數一直存在,直到delete釋放記憶體)

2)函式的作用域只能是整個類,或整個命名空間。不能是區域性的,因為不能在函式中定義函式

3)暫存器變數(頻繁使用的變數) register int i; //沒有記憶體位址,不能將位址操作符用於暫存器變數

4)作用域解析操作符 "::"

5)extern 使用例項

file1.c:int count=1;

file2.c:

#include "stdio.h" extern int count; int main()6)注意:extern 宣告的變數不能初始化

7)使用new 運算子 初始化變數的語句一定要 位於函式中,因為只能使用常量表示式來初始化靜態儲存變數

三,布局new操作符

讓程式設計師指定要使用的位置,

程式設計師可以使用這種特性來設定其記憶體管理規程或處理需要通過特定位址進行訪問的硬體。

注意:要使用布局new操作符,必須新增 #include

例子:

#include #include using namespace std; char buff[512]; int main() double fech; } int main() { using namespace jill; using std::cout; using std::endl; double water=bucket(2); fech=4; double fech=5; cout<<"water:"<

第九章 記憶體模型和命名空間

一 1.標頭檔案中內容 函式原型 define與const常量 結構宣告 類宣告 模板宣告 內聯函式 2.防止重複定義,防止二次包含,ifndef endif 3.多個庫鏈結,兩個編譯器可能為同乙個函式生成不同修飾名稱,最好是同乙個編譯器編譯生成的庫。二 儲存持續性 作用域和鏈結性 1.儲存資料方案...

C primer 第九章筆記 初稿

性質 容器中元素的順序與加入的位置相對應,為使用者提供了控制元素儲存和訪問順序的能力。六大順序容器 名稱功能 特點 vector 可變大小陣列 支援快速隨機訪問,除尾部外插入 刪除較慢 deque 雙端佇列 支援快速隨機訪問,頭尾外插入刪除較慢 list 雙向列表 支援雙向順序訪問,任何位置插入刪除...

C primer 第九章順序容器!

標準庫定義了3種順序容器 vector支援隨機訪問,list支援快速插入刪除,deque雙端佇列。他們的差別在於訪問元素的方式,以及新增或刪除元素操作的執行代價。1.容器元素的初始化 預設的建構函式 listilist list容器,裡面內容是int型別的內容 dequeitems 空容器deque...