九、內(nèi)存的分配方式
分配方式有三種,請(qǐng)記住,說不定那天去面試的時(shí)候就會(huì)有人問你這問題。
1、 靜態(tài)存儲(chǔ)區(qū),是在程序編譯時(shí)就已經(jīng)分配好的,在整個(gè)運(yùn)行期間都存在,如全局變量、常量。
2、 棧上分配,函數(shù)內(nèi)的局部變量就是從這分配的,但分配的內(nèi)存容易有限。
3、 堆上分配,也稱動(dòng)態(tài)分配,如我們用new,malloc分配內(nèi)存,用delete,free來釋放的內(nèi)存。
十、內(nèi)存分配的注意事項(xiàng)
用new或malloc分配內(nèi)存時(shí),必須要對(duì)此指針賦初值。
用delete 或free釋放內(nèi)存后,必須要將指針指向NULL。
不能修改指向常量的指針數(shù)據(jù)。
十一、內(nèi)容復(fù)制與比較
//數(shù)組……
char a[]=”Hello Word!”;
char b[10];
strcpy(b,a);
if (strcmp(a,b)==0)
{}
//指針……
char a[]=”Hello Word!”;
char *p;
p=new char[strlen(a)+1];
strcpy(p,a);
if (strcmp(p,a)==0)
{}
十二、sizeof的問題
記住一點(diǎn),C++無法知道指針?biāo)笇?duì)象的大小,指針的大小永遠(yuǎn)為4字節(jié)。
char a[]=”Hello World!”
char *p=a;
count<
count<
而且,在函數(shù)中,數(shù)組參數(shù)退化為指針,所以下面的內(nèi)容永遠(yuǎn)輸出為4。
void fun(char a[1000])
{
count<
}
十三、關(guān)于指針
1、 指針創(chuàng)建時(shí)必須被初始化。
2、 指針在free 或delete后必須置為NULL。
3、 指針的長度都為4字節(jié)。
4、釋放內(nèi)存時(shí),如果是數(shù)組指針,必須要釋放掉所有的內(nèi)存,如:
char *p=new char[100];
strcpy(p,”Hello World”);
delete []p; //注意前面的[]號(hào)
p=NULL;
5、數(shù)組指針的內(nèi)容不能超過數(shù)組指針的最大容易。
如:
char *p=new char[5];
strcpy(p,”Hello World”); //報(bào)錯(cuò) 目標(biāo)容易不夠大
delete []p; //注意前面的[]號(hào)
p=NULL;
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |