1、按變量的地址直接存取變量的方法,稱為“直接訪問(wèn)”。存儲(chǔ)該變量的內(nèi)存空間的首地址稱為該變量的地址。
2、如果將一個(gè)變量的地址放在另一個(gè)變量中,則存放地址的變量稱為指針型變量。
此時(shí)存取變量,可以間接地由指針型變量取得該變量的地址,這稱為“間接訪問(wèn)”的方式。
3、指針型變量的值也簡(jiǎn)稱為指針,所以指針就是地址。
4、指針型變量的定義格式:類(lèi)型 * 變量名。其中*是定義指針類(lèi)型的說(shuō)明符,而不是指針變量的一部分。
5、指針變量絕對(duì)不能任意賦一個(gè)內(nèi)存地址,只能取一個(gè)已經(jīng)分配了內(nèi)存的變量的地址賦值給指針變量。
6、c++中,有兩個(gè)專門(mén)的運(yùn)算符與指針有關(guān)。
a. &:取地址符,運(yùn)算結(jié)果不能作為左值。
b. *: 是間接引用運(yùn)算符,作用于一個(gè)指針型變量,訪問(wèn)該指針?biāo)赶虻膬?nèi)存數(shù)據(jù)。因?yàn)槭莾?nèi)存中的可尋址數(shù)據(jù),所以可以作為左值。
7、const修飾指針:
a. 指針常量:固定指向一個(gè)對(duì)象的指針,指針本身是常量,此時(shí),const放中間。char * const ptr = &ch。ptr本身在初始化時(shí)的地址是不可變的,但它指向的目標(biāo)ch的值是可以改變的。
b. ?常量指針:指向“常量”的指針,即指針本身是可以改為指向別的對(duì)象,但不能通過(guò)該指針修改對(duì)象。即只能作為只讀指針使用。此時(shí),const放前面,const char * ptr = &ch。常量指針一般用于函數(shù)的參數(shù),以免誤改實(shí)參。
8、數(shù)組與指針的關(guān)系:數(shù)組名看作改數(shù)組的第一個(gè)元素在內(nèi)存中的首地址。數(shù)組名是地址,當(dāng)然也是指針,但數(shù)組名中存放的地址是不可以改變的,所以稱為指針常量。
9、指針作為函數(shù)參數(shù)。將指針做為函數(shù)的參數(shù)時(shí),傳的仍然是值,即指針的值,這個(gè)值就是指針?biāo)赶蛟氐牡刂贰?/p>
從物理上講,傳的是指針的值,與傳其他變量沒(méi)有區(qū)別,函數(shù)獲得的是另一個(gè)變量的地址;
從邏輯上講,是把另一個(gè)變量的地址傳了過(guò)去,可以看作傳地址。
函數(shù)中操作的對(duì)象不是指針本身,而是指針?biāo)赶虻淖兞?,與引用參數(shù)在本質(zhì)上沒(méi)有差別。
10、指針的“算術(shù)運(yùn)算”與“關(guān)系運(yùn)算”,只有指針指向數(shù)組或結(jié)構(gòu)體元素的時(shí)候,這些運(yùn)算才有意義,主要規(guī)則:
a.指針變量與整形變量n的加減表示移動(dòng)指針
新指針的值 = 原指針 + n * sizeof(指針指向的數(shù)據(jù)類(lèi)型)
b.只有當(dāng)兩個(gè)同類(lèi)型的指針變量指向同一個(gè)數(shù)組時(shí),才可以進(jìn)行減法運(yùn)算,表示從第一個(gè)指針到第二個(gè)指針元素之間的元素?cái)?shù)量。第一個(gè)和第二個(gè)元素之間元素的個(gè)數(shù)是1,即原指針的地址值得差除以sizeof(元素類(lèi)型)
c.只有當(dāng)指向同一個(gè)數(shù)組時(shí),才能用‘>' '==' '!='
注意:兩個(gè)指針相加毫無(wú)意義
d.指針同樣可以++,--運(yùn)算,必須小心使用,注意優(yōu)先級(jí)。
y = *p++ ? ==> y = *(p++)因?yàn)楹?+,所以y取值為*p, 而*p增加1后,指向下一個(gè)元素。
千萬(wàn)不要以為是p所指的目標(biāo)元素的值加1.