注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。
測試環境:ubuntu 10.10
gcc版本:4.4.5
一、動態記憶體分配
1)c++中的動態記憶體分配
- c++中通過new關鍵字進行動態記憶體申請
- c++中的動態記憶體申請是基於型別進行的
- delete關鍵字用於記憶體釋放
釋放陣列記憶體時,delete後邊不加只會釋放陣列首位址記憶體,造成記憶體洩露!!
例項分析
c++中的動態記憶體分配
10-1.cpp
#include int main()
delete p; //釋放陣列
return 0;
}
操作:
1) g++ 10-1.cpp -o 10-1.out編譯正確,列印結果:
p = 0x9fb6008
*p = 15
p[0] = 1
p[1] = 2
p[2] = 3
p[3] = 4
p[4] = 5
p[5] = 6
p[6] = 7
p[7] = 8
p[8] = 9
p[9] = 10
2)new關鍵字與malloc函式的區別
- new關鍵字是c++的一部分
-malloc是由c庫提供的函式
-new以具體型別為單位進行記憶體分配
- malloc以位元組為單位進行記憶體分配
- new在申請單個型別變數時可進行初始化(如何初始化看下邊)
- malloc不具備記憶體初始化的特性
3)new關鍵字的初始化
int* pi = new int(1); //():初始化變數為1
float* pf = new float(2.0f); //初始化變數為2.0f
char* pc = new char('c'); //初始化變數為c
程式設計實驗
初始化動態記憶體
10-2.cpp
#include int main()
操作:
1) g++ 10-2.cpp -o 10-2.out編譯正常,列印結果:
*pi = 1
*pf = 2.000000
*pc = c
分析:
申請記憶體時可以初始化記憶體中資料,並且記憶體申請是以變數型別為單位進行分配。
三、c++中的命名空間
1)在c語言中只有乙個全域性作用域
- c語言中所有的全域性識別符號共享同乙個作用域
- 識別符號之間可能發生衝突
2)c++中提出了命名空間的概念
- 命名空間將全域性作用域分成不同的部分
- 不同命名空間中的識別符號可以同名而不會發生衝突
- 命名空間可以相互巢狀
- 全域性作用域也叫預設命名空間
3)c++命名空間的定義
namespace name //劃分全域性作用域
/*……*/
}
4)c++命名空間的使用:
- 使用整個命名空間:using namespace name;
- 使用命名空間中的變數:using name::variable;
- 使用預設命名空間中的變數:::variable(省略了空間名)
例項分析
命令空間的使用
10-3.cpp
#include namespace first
namespace second
; }
}int main()
; //宣告乙個p結構體,並初始化
printf("p.x = %d\n", p.x);
printf("p.y = %d\n", p.y);
return 0;
}
操作:
1) g++ 10-3.cpp -o 10-3.out編譯輸出,列印結果:
first::i = 0
second::i = 1
p.x = 2
p.y = 3
小結
1)c++中內建了動態記憶體分配的專用關鍵字
2)c++中的動態記憶體分配可以同時進行初始化
3)c++中的動態記憶體分配是基於型別進行的
4)c++中命名空間概念用於解決名稱衝突問題
C 10 C 中的新成員
變數申請 type pointer new type 堆空間中單個記憶體單元申請 delete pointer 釋放 pointer 所指向的單個記憶體單元陣列申請 type pointer new type n 堆空間中連續 n 個記憶體單元申請 delete pointer 釋放 pointer...
第10課 C 中的新成員
本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 例項分析 c 中的動態記憶體分配 include intmain delete p return0 執行結果 new關鍵字與malloc函式的區別 new關鍵字是c 的一部分 malloc是由c庫提供的函式 new 以具體型別為單位...
第10課 C 中的新成員
1.1 c 中的動態記憶體分配 1 c 中通過new關鍵字進行動態記憶體申請 2 c 中的動態記憶體申請是基於型別進行的 3 delete關鍵字用於記憶體釋放 1 type pointer new type 2 3delete pointer 變數申請 1 type pointer new type...