聲明指針:
typeName * pointerName;
指針賦值:
double * pn;
double bubble = 3.2;
pn = &bubble;
數(shù)組名:
通常數(shù)組名是第一個(gè)元素的地址贾漏。
只有在調(diào)用 sizeof() 的時(shí)候會(huì)返回整個(gè)數(shù)組的長(zhǎng)度。
指針?biāo)阈g(shù):
指針與整數(shù)相加的結(jié)果是指針移動(dòng)整數(shù)個(gè)位置歧寺。
指針相減的結(jié)果是整數(shù),只有當(dāng)兩個(gè)指針指向同一個(gè)位置時(shí)才有意義棘脐。
解除引用:
即取值斜筐。
char * p = a;
cout << *p; // *p即解除引用
數(shù)組的動(dòng)態(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ù)組表示法和指針表示法:
使用方括號(hào)等同于指針解除引用操作。
a[0] means *a;
a[3] means *(a+3);
自動(dòng)存儲(chǔ):
定義常規(guī)變量時(shí)使用自動(dòng)存儲(chǔ)空間蛀缝,即自動(dòng)變量顷链。
這些變量在所屬含稅被調(diào)用時(shí)自動(dòng)產(chǎn)生,函數(shù)結(jié)束時(shí)消亡屈梁。
事實(shí)上嗤练,自動(dòng)變量是局部變量榛了,作用域?yàn)榘拇a塊,即花括號(hào)內(nèi)煞抬。
自動(dòng)變量存儲(chǔ)在棧中霜大。
執(zhí)行代碼塊時(shí),自動(dòng)變量按定義順序加入到棧中革答,離開(kāi)時(shí)按相反順序退出战坤。
在程序執(zhí)行時(shí),棧不斷地增大和縮小蝗碎。
靜態(tài)存儲(chǔ):
在整個(gè)程序的執(zhí)行期間都存在的存儲(chǔ)方式湖笨。
方式有兩種:在函數(shù)外定義它;使用關(guān)鍵字static蹦骑;
static double fee = 56.50
自動(dòng)存儲(chǔ)和靜態(tài)存儲(chǔ)的關(guān)鍵在于:這些方法嚴(yán)格的限制了變量的壽命慈省。
變量可能存在于程序的整個(gè)生命周期(靜態(tài)變量),也可能只是在特定函數(shù)被執(zhí)行時(shí)存在(自動(dòng)變量)眠菇。
動(dòng)態(tài)存儲(chǔ):
即new和delete運(yùn)算符的方法边败,它們管理了一個(gè)內(nèi)存池——堆。
堆與用于靜態(tài)和自動(dòng)變量的內(nèi)存是分開(kāi)的捎废。
new 和 delete 能夠在一個(gè)函數(shù)中主動(dòng)地分配內(nèi)存笑窜,而在另一個(gè)函數(shù)中釋放它。因此數(shù)據(jù)的生命周期完全不受程序或者函數(shù)的生存時(shí)間所控制登疗。
內(nèi)存泄漏:
如果在使用new之后沒(méi)有調(diào)用delete排截,那么即使包含指針的內(nèi)存被釋放,堆上動(dòng)態(tài)分配的變量和結(jié)構(gòu)也將繼續(xù)存在辐益。這將導(dǎo)致內(nèi)存泄漏断傲。被泄露的內(nèi)存將在整個(gè)程序的生命周期都不可使用。甚至可能導(dǎo)致內(nèi)存耗盡智政。