指針優(yōu)點(diǎn):
1。為函數(shù)提供修改調(diào)用變元的手段;
2。支持C++動(dòng)態(tài)分配子程序
3??梢愿纳颇承┳映绦虻男?BR> 4。為動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)(如二叉樹、鏈表)提供支持
注:指針為程序引入了一層間接性,可以操控指針而不直接操控對象。
1??刹倏刂羔槂?nèi)含的地址也可操控指針?biāo)傅膶ο?BR> 2。指針可能并不指向任何對象,寫*pi時(shí),可能會(huì)使程序在執(zhí)行期錯(cuò)誤,如尋址到某個(gè)對
象,則提領(lǐng)操作,不指向任何對象,會(huì)出錯(cuò),所以在提領(lǐng)前先確定它的確指向某對象.
一個(gè)未指向任何對象的指針,內(nèi)含地址為0,有時(shí)稱為null指針,assert (p != 0)可檢測是
否分配成功。也可用if (pi),只有在pi含非零值時(shí),才為true.
一、定義:
為存放內(nèi)存地址的變量。
詮釋:
指針為一數(shù)據(jù)類型也有自己的地址。占用四個(gè)字節(jié)的存儲(chǔ)空間
int * p: &p返回的是指針p的地址,而不是所指變量的地址
地址:一般指內(nèi)存中另一變量的位置
二、指針變量:
type * name 聲明時(shí)必須確保它的類型與要指向的對象類型兼容
const 是“最靠近”為原則
指向整數(shù)常量的指針:const int * p;它所指向的值只讀不能被修改 *p = 4(錯(cuò)誤),p =
5(正確)
指向一個(gè)整數(shù)的常量指針:int * const p;不允許修改指針變量的值,*p = 5 (正確),p
= 5 (錯(cuò)誤)
三、指針操作符:
&(取址運(yùn)算符):一元操作符,只作用于一個(gè)操作數(shù),返回操作數(shù)的地址
*(提領(lǐng)操作):一元操作符,是&的補(bǔ)操作,返回其操作數(shù)所指變量的值
四、指針賦值及轉(zhuǎn)換:
同類型直接賦值,異類型要進(jìn)行轉(zhuǎn)換。
強(qiáng)制轉(zhuǎn)換:可以把表達(dá)式結(jié)果硬性轉(zhuǎn)換為指定類型
char * p;(int *)p 把p強(qiáng)制轉(zhuǎn)換為int型,記住轉(zhuǎn)換過程中要注意兩個(gè)類型的大小,大轉(zhuǎn)
小時(shí)可能會(huì)有數(shù)據(jù)丟失(如int到double)
涉及void *的:
c 中void *類型可賦值給任何類型的指針,反之亦然
c++ 中都需要強(qiáng)制轉(zhuǎn)換
void * 可似為無窮大能接納任何類型賦值,反之不行int * p =9;void * t= p(正確)
;p=t(錯(cuò)誤)
不涉及void *的都要強(qiáng)制轉(zhuǎn)換
五、指針的算術(shù)操作
和整數(shù)的加法,減法,自身的增量、減量
指針增量后指向下一個(gè)與指針基類同型的元素,增減單位是所指類型的長度。
六、其他說明:
1。指針和數(shù)組:
不帶下標(biāo)的數(shù)組名返回?cái)?shù)組的起始地址,即數(shù)組首元素的地址,所以對數(shù)組的訪問可有兩
種方式:數(shù)組下標(biāo)和指針?biāo)阈g(shù)
2。函數(shù)指針:
函數(shù)具有可賦給指針的物理內(nèi)存地址,一個(gè)函數(shù)地址也為該函數(shù)的進(jìn)入點(diǎn),也是調(diào)用函數(shù)
的地址
3。多級指針地址 **p
七、動(dòng)態(tài)內(nèi)存分配
定義:是程序在運(yùn)行中取得內(nèi)存的方法。是從堆(heap)--系統(tǒng)的自由內(nèi)存區(qū)-取得內(nèi)存
運(yùn)算符:
new(c中的malloc):自動(dòng)建立一個(gè)具有合適大小的對象,返回具有正確類型的指針,如分配
不成功,返回一個(gè)空指針0,且可自動(dòng)調(diào)用構(gòu)造函數(shù)。
char * p = new char(’t’);
delete(c中的free):delect p;
釋放數(shù)組對象時(shí)要使用方括號delete [] p;
1。為函數(shù)提供修改調(diào)用變元的手段;
2。支持C++動(dòng)態(tài)分配子程序
3??梢愿纳颇承┳映绦虻男?BR> 4。為動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)(如二叉樹、鏈表)提供支持
注:指針為程序引入了一層間接性,可以操控指針而不直接操控對象。
1??刹倏刂羔槂?nèi)含的地址也可操控指針?biāo)傅膶ο?BR> 2。指針可能并不指向任何對象,寫*pi時(shí),可能會(huì)使程序在執(zhí)行期錯(cuò)誤,如尋址到某個(gè)對
象,則提領(lǐng)操作,不指向任何對象,會(huì)出錯(cuò),所以在提領(lǐng)前先確定它的確指向某對象.
一個(gè)未指向任何對象的指針,內(nèi)含地址為0,有時(shí)稱為null指針,assert (p != 0)可檢測是
否分配成功。也可用if (pi),只有在pi含非零值時(shí),才為true.
一、定義:
為存放內(nèi)存地址的變量。
詮釋:
指針為一數(shù)據(jù)類型也有自己的地址。占用四個(gè)字節(jié)的存儲(chǔ)空間
int * p: &p返回的是指針p的地址,而不是所指變量的地址
地址:一般指內(nèi)存中另一變量的位置
二、指針變量:
type * name 聲明時(shí)必須確保它的類型與要指向的對象類型兼容
const 是“最靠近”為原則
指向整數(shù)常量的指針:const int * p;它所指向的值只讀不能被修改 *p = 4(錯(cuò)誤),p =
5(正確)
指向一個(gè)整數(shù)的常量指針:int * const p;不允許修改指針變量的值,*p = 5 (正確),p
= 5 (錯(cuò)誤)
三、指針操作符:
&(取址運(yùn)算符):一元操作符,只作用于一個(gè)操作數(shù),返回操作數(shù)的地址
*(提領(lǐng)操作):一元操作符,是&的補(bǔ)操作,返回其操作數(shù)所指變量的值
四、指針賦值及轉(zhuǎn)換:
同類型直接賦值,異類型要進(jìn)行轉(zhuǎn)換。
強(qiáng)制轉(zhuǎn)換:可以把表達(dá)式結(jié)果硬性轉(zhuǎn)換為指定類型
char * p;(int *)p 把p強(qiáng)制轉(zhuǎn)換為int型,記住轉(zhuǎn)換過程中要注意兩個(gè)類型的大小,大轉(zhuǎn)
小時(shí)可能會(huì)有數(shù)據(jù)丟失(如int到double)
涉及void *的:
c 中void *類型可賦值給任何類型的指針,反之亦然
c++ 中都需要強(qiáng)制轉(zhuǎn)換
void * 可似為無窮大能接納任何類型賦值,反之不行int * p =9;void * t= p(正確)
;p=t(錯(cuò)誤)
不涉及void *的都要強(qiáng)制轉(zhuǎn)換
五、指針的算術(shù)操作
和整數(shù)的加法,減法,自身的增量、減量
指針增量后指向下一個(gè)與指針基類同型的元素,增減單位是所指類型的長度。
六、其他說明:
1。指針和數(shù)組:
不帶下標(biāo)的數(shù)組名返回?cái)?shù)組的起始地址,即數(shù)組首元素的地址,所以對數(shù)組的訪問可有兩
種方式:數(shù)組下標(biāo)和指針?biāo)阈g(shù)
2。函數(shù)指針:
函數(shù)具有可賦給指針的物理內(nèi)存地址,一個(gè)函數(shù)地址也為該函數(shù)的進(jìn)入點(diǎn),也是調(diào)用函數(shù)
的地址
3。多級指針地址 **p
七、動(dòng)態(tài)內(nèi)存分配
定義:是程序在運(yùn)行中取得內(nèi)存的方法。是從堆(heap)--系統(tǒng)的自由內(nèi)存區(qū)-取得內(nèi)存
運(yùn)算符:
new(c中的malloc):自動(dòng)建立一個(gè)具有合適大小的對象,返回具有正確類型的指針,如分配
不成功,返回一個(gè)空指針0,且可自動(dòng)調(diào)用構(gòu)造函數(shù)。
char * p = new char(’t’);
delete(c中的free):delect p;
釋放數(shù)組對象時(shí)要使用方括號delete [] p;