聲明指針:
typeName * pointerName;
指針賦值:
double * pn;
double bubble = 3.2;
pn = &bubble;
數(shù)組名:
通常數(shù)組名是第一個元素的地址。
只有在調(diào)用 sizeof() 的時候會返回整個數(shù)組的長度。
指針?biāo)阈g(shù):
指針與整數(shù)相加的結(jié)果是指針移動整數(shù)個位置。
指針相減的結(jié)果是整數(shù),只有當(dāng)兩個指針指向同一個位置時才有意義。
解除引用:
即取值。
char * p = a;
cout << *p; // *p即解除引用
數(shù)組的動態(tài)和靜態(tài)聲明:
C:
int size;
scanf(“%d”,&size);
int * b = (int*)malloc(sizeof(int)*size)`
C++:
int size;
cin >> size;
int * b = new int [size];
數(shù)組表示法和指針表示法:
使用方括號等同于指針解除引用操作。
a[0] means *a;
a[3] means *(a+3);
自動存儲:
定義常規(guī)變量時使用自動存儲空間,即自動變量。
這些變量在所屬含稅被調(diào)用時自動產(chǎn)生,函數(shù)結(jié)束時消亡。
事實(shí)上,自動變量是局部變量,作用域?yàn)榘拇a塊,即花括號內(nèi)。
自動變量存儲在棧中。
執(zhí)行代碼塊時,自動變量按定義順序加入到棧中,離開時按相反順序退出。
在程序執(zhí)行時,棧不斷地增大和縮小。
靜態(tài)存儲:
在整個程序的執(zhí)行期間都存在的存儲方式。
方式有兩種:在函數(shù)外定義它;使用關(guān)鍵字static;
static double fee = 56.50
自動存儲和靜態(tài)存儲的關(guān)鍵在于:這些方法嚴(yán)格的限制了變量的壽命。
變量可能存在于程序的整個生命周期(靜態(tài)變量),也可能只是在特定函數(shù)被執(zhí)行時存在(自動變量)。
動態(tài)存儲:
即new和delete運(yùn)算符的方法,它們管理了一個內(nèi)存池——堆。
堆與用于靜態(tài)和自動變量的內(nèi)存是分開的。
new 和 delete 能夠在一個函數(shù)中主動地分配內(nèi)存,而在另一個函數(shù)中釋放它。因此數(shù)據(jù)的生命周期完全不受程序或者函數(shù)的生存時間所控制。
內(nèi)存泄漏:
如果在使用new之后沒有調(diào)用delete,那么即使包含指針的內(nèi)存被釋放,堆上動態(tài)分配的變量和結(jié)構(gòu)也將繼續(xù)存在。這將導(dǎo)致內(nèi)存泄漏。被泄露的內(nèi)存將在整個程序的生命周期都不可使用。甚至可能導(dǎo)致內(nèi)存耗盡。