1. 程式人生 > >2-資料型別

2-資料型別

  • 內建陣列資料型別

在內建資料型別與標準庫類的型別之間是複合型別,特別是指標和陣列型別。
陣列(array)是一種順序容器,它包含單一型別的元素。
雖然C++對陣列型別提供了內建支援,但是這種支援僅限於“用來讀寫單個元素”的機制。C++不支援陣列的抽象(abstraction),也不支援對整個陣列的操作。


  • 動態記憶體分配和指標
在C++中,物件可以靜態分配——即編譯器在處理程式原始碼時分配,也可以動態分配——即程式執行時呼叫執行時刻庫函式來分配。這兩種記憶體分配方法的主要區別是效率和靈活性之間的平衡準則不同。
C++支援指標型別來存放物件的記憶體地址值。例如,為了宣告一個能存放ival記憶體地址的指標型別,可以這樣寫:
int *pint
//一個指向int型別的指標

C++預定義了一個專門的取地址操作符(&)。當我們把它應用在一個物件上時,返回的是物件的地址值。因此,為了將ival記憶體地址值賦給pint,可以這樣寫

int *pint;
pint = &ival;//把ival的地址賦給pint

為了訪問pint所指向的實際物件,必須先用解引用(dereference)操作符(*)來解除pint的引用,例如通過pint間接地給ival加1

*pint = *pint + 1;//通過pint間接地給ival加1.

在C++中,指標的主要用處是管理和操縱動態分配的記憶體。
靜態與動態記憶體分配的兩個重要區別:
1 . 靜態物件是有名字的變數,可以直接對其進行操作。而動態物件是沒有名字的變數,通過指標間接地對它進行操作。
2. 靜態物件的分配與釋放由編譯器自動處理。相反,動態物件的分配管理與釋放,必須由程式設計師顯示地管理,通過new和delete兩個表示式來完成。

int *pint = new int(1024);//分配特定型別的單個物件
delete pint;//刪除單個物件
int *pia = new int[4];//分配特定型別和維數的陣列
delete [] pia;//刪除一個物件陣列

如果忘記刪除動態分配記憶體,程式就會在結束時出現記憶體洩漏的問題。記憶體洩漏是指一塊動態分配的記憶體,我們不再擁有指向這塊記憶體的指標,因此沒有辦法將它返還給程式供以後重新使用。