||
指針是一個(gè)特殊的變量,它里面存儲的數值被解釋成為內存里的一個(gè)地址。 要搞清一個(gè)指針需要搞清指針的四方面的內容:指針的類(lèi)型,指針所指向的 類(lèi)型,指針的值或者叫指針所指向的內存區,還有指針本身所占據的內存區。讓我們分別說(shuō)明。
先聲明幾個(gè)指針?lè )胖?zhù)做例子:
例一:
(1)int*ptr;
(2)char*ptr;
(3)int**ptr;
(4)int(*ptr)[3];
(5)int*(*ptr)[4];
如果看不懂后幾個(gè)例子的話(huà),請參閱我前段時(shí)間貼出的文章<<如何理解c和c ++的復雜類(lèi)型聲明>>。
指針的類(lèi)型
從語(yǔ)法的角度看,你只要把指針聲明語(yǔ)句里的指針名字去掉,剩下的部分就是這個(gè)指針的類(lèi)型。這是指針本身所具有的類(lèi)型。讓我們看看例一中各個(gè)指針的類(lèi)型:
(1)int*ptr;//指針的類(lèi)型是int*
(2)char*ptr;//指針的類(lèi)型是char*
(3)int**ptr;//指針的類(lèi)型是int**
(4)int(*ptr)[3];//指針的類(lèi)型是int(*)[3]
(5)int*(*ptr)[4];//指針的類(lèi)型是int*(*)[4]
怎么樣?找出指針的類(lèi)型的方法是不是很簡(jiǎn)單?
指針所指向的類(lèi)型
當你通過(guò)指針來(lái)訪(fǎng)問(wèn)指針所指向的內存區時(shí),指針所指向的類(lèi)型決定了編譯器將把那片內存區里的內容當做什么來(lái)看待。
從語(yǔ)法上看,你只須把指針聲明語(yǔ)句中的指針名字和名字左邊的指針聲明符*去掉,剩下的就是指針所指向的類(lèi)型。例如:
(1)int*ptr;//指針所指向的類(lèi)型是int
(2)char*ptr;//指針所指向的的類(lèi)型是char
(3)int**ptr;//指針所指向的的類(lèi)型是int*
(4)int(*ptr)[3];//指針所指向的的類(lèi)型是int()[3]
(5)int*(*ptr)[4];//指針所指向的的類(lèi)型是int*()[4]
在指針的算術(shù)運算中,指針所指向的類(lèi)型有很大的作用。
指針的類(lèi)型(即指針本身的類(lèi)型)和指針所指向的類(lèi)型是兩個(gè)概念。當你對C越來(lái)越熟悉時(shí),你會(huì )發(fā)現,把與指針攪和在一起的"類(lèi)型"這個(gè)概念分成"指針的類(lèi)型"和"指針所指向的類(lèi)型"兩個(gè)概念,是精通指針的關(guān)鍵點(diǎn)