|
讓你不再害怕指針
前言:復(fù)雜類(lèi)型說(shuō)明
要了解指針,多多少少會(huì)出現(xiàn)一些比較復(fù)雜的類(lèi)型,所以我先介紹一下如何完全理解一個(gè)復(fù)雜類(lèi)型,要理解復(fù)雜類(lèi)型其實(shí)很簡(jiǎn)單,一個(gè)類(lèi)型里會(huì)出現(xiàn)很多運(yùn)算符,他們也像普通的表達(dá)式一樣,有優(yōu)先級(jí),其優(yōu)先級(jí)和運(yùn)算優(yōu)先級(jí)一樣,所以我總結(jié)了一下其原則:
從變量名處起,根據(jù)運(yùn)算符優(yōu)先級(jí)結(jié)合,一步一步分析.
下面讓我們先從簡(jiǎn)單的類(lèi)型開(kāi)始慢慢分析吧:
0.png (58.7 KB, 下載次數(shù): 72)
下載附件
2018-3-17 22:32 上傳
//比*高,所以 P是一個(gè)數(shù)組,然后再與*結(jié)合,說(shuō)明
//數(shù)組里的元素是指針類(lèi)型,然后再與 int結(jié)合,
//說(shuō)明指針?biāo)赶虻膬?nèi)容的類(lèi)型是整型的,所以
//P 是一個(gè)由返回整型數(shù)據(jù)的指針?biāo)M成的數(shù)組
int (*p)[3];
//首先從 P處開(kāi)始,先與*結(jié)合,說(shuō)明 P是一個(gè)指針
//然后再與[]結(jié)合(與"()"這步可以忽略,只是為
//了改變優(yōu)先級(jí)),說(shuō)明指針?biāo)赶虻膬?nèi)容是一個(gè)
//數(shù)組,然后再與 int 結(jié)合,說(shuō)明數(shù)組里的元素是
//整型的.所以 P 是一個(gè)指向由整型數(shù)據(jù)組成的數(shù)
//組的指針
0.png (69.1 KB, 下載次數(shù): 60)
下載附件
2018-3-17 22:34 上傳
0.jpg (64.87 KB, 下載次數(shù): 63)
下載附件
2018-3-17 22:34 上傳
//的指針變量的函數(shù).
說(shuō)到這里也就差不多了,我們的任務(wù)也就這么多,理解了這幾個(gè)類(lèi)型,其它的類(lèi)型對(duì)我們來(lái)說(shuō)也是小菜了,不過(guò)我們一般不會(huì)用太復(fù)雜的類(lèi)型,那樣會(huì)大大減小程序的可讀性,請(qǐng)慎用,這上面的幾種類(lèi)型已經(jīng)足夠我們用了.
1、細(xì)說(shuō)指針
指針是一個(gè)特殊的變量,它里面存儲(chǔ)的數(shù)值被解釋成為內(nèi)存里的一個(gè)地址。要搞清一個(gè)指針需要搞清指針的四方面的內(nèi)容:指針的類(lèi)型、指針?biāo)赶虻念?lèi)型、指針的值或者叫指針?biāo)赶虻膬?nèi)存區(qū)、指針本身所占據(jù)的內(nèi)存區(qū)。讓
我們分別說(shuō)明。
先聲明幾個(gè)指針?lè)胖隼樱?br />
0.jpg (37.96 KB, 下載次數(shù): 58)
下載附件
2018-3-17 22:35 上傳
(5)int*(*ptr)[4];//指針的類(lèi)型是 int*(*)[4]
怎么樣?找出指針的類(lèi)型的方法是不是很簡(jiǎn)單?
2.指針?biāo)赶虻念?lèi)型
當(dāng)你通過(guò)指針來(lái)訪(fǎng)問(wèn)指針?biāo)赶虻膬?nèi)存區(qū)時(shí),指針?biāo)赶虻念?lèi)型決定了編譯器將把那片內(nèi)存區(qū)里的內(nèi)容當(dāng)做什么來(lái)看待。
從語(yǔ)法上看,你只須把指針聲明語(yǔ)句中的指針名字和名字左邊的指針聲明符*去掉,剩下的就是指針?biāo)赶虻念?lèi)型。例如:
(1)int*ptr; //指針?biāo)赶虻念?lèi)型是int
(2)char*ptr; //指針?biāo)赶虻牡念?lèi)型是char
(3)int**ptr; //指針?biāo)赶虻牡念?lèi)型是int*
(4)int(*ptr)[3]; //指針?biāo)赶虻牡念?lèi)型是int()[3]
(5)int*(*ptr)[4]; //指針?biāo)赶虻牡念?lèi)型是int*()[4]
在指針的算術(shù)運(yùn)算中,指針?biāo)赶虻念?lèi)型有很大的作用。
指針的類(lèi)型(即指針本身的類(lèi)型)和指針?biāo)赶虻念?lèi)型是兩個(gè)概念。當(dāng)你對(duì) C 越來(lái)越熟悉時(shí),你會(huì)發(fā)現(xiàn),把與指針攪和在一起的"類(lèi)型"這個(gè)概念分成"指針的類(lèi)型"和"指針?biāo)赶虻念?lèi)型"兩個(gè)概念,是精通指針的關(guān)鍵點(diǎn)之一。
我看了不少書(shū),發(fā)現(xiàn)有些寫(xiě)得差的書(shū)中,就把指針的這兩個(gè)概念攪在一起了,所以看起書(shū)來(lái)前后矛盾,越看越糊涂。
3.指針的值----或者叫指針?biāo)赶虻膬?nèi)存區(qū)或地址
指針的值是指針本身存儲(chǔ)的數(shù)值,這個(gè)值將被編譯器當(dāng)作一個(gè)地址,而不是一個(gè)一般的數(shù)值。在32 位程序里,所有類(lèi)型的指針的值都是一個(gè) 32位
0.png (124.72 KB, 下載次數(shù): 69)
下載附件
2018-3-17 22:38 上傳
…………………………
…………此處省略若干字………………
…………………………
10、結(jié)束語(yǔ)
現(xiàn)在你是否已經(jīng)覺(jué)得指針再也不是你所想的那么害怕了,如果你的回答是:對(duì),我不怕了!哈哈,恭喜你,你已經(jīng)掌握 C語(yǔ)言的精華了,C中唯一的難點(diǎn)就是指針,指針搞定其它小菜而已,重要的是實(shí)踐,好吧,讓我們先暫停C 的旅程吧,開(kāi)始我們的C++編程,C是對(duì)底層操作非常方便的語(yǔ)言,但開(kāi)發(fā)大型程序本人覺(jué)得還是沒(méi)有 C++方便,至少維護(hù)方面不太好做。而且C++是面向?qū)ο蟮恼Z(yǔ)言,現(xiàn)在基本已經(jīng)是面向?qū)ο蟮奶煜铝,所以建議學(xué) C++。C++是一門(mén)難學(xué)易用的語(yǔ)言,要真正掌握 C++可不是那么容易的,將基本的學(xué)完后,就學(xué)數(shù)據(jù)結(jié)構(gòu)吧,算法才是永恒的,程序設(shè)計(jì)語(yǔ)言層出不窮,永遠(yuǎn)學(xué)不完。學(xué)完之后就認(rèn)真啃下 STL 這根骨頭吧,推薦書(shū)籍--------范型編程與 STL 和 STL 源碼剖析。如果你達(dá)到了這樣要求,再一次恭喜你,你已經(jīng)是個(gè)程序高手了,甚至可以說(shuō)是個(gè)算法高手,因?yàn)?STL 里有大量的精華而高效的算法。唉,已經(jīng)該說(shuō)再見(jiàn)的時(shí)候了,讓我們一起用我們的語(yǔ)言來(lái)譜寫(xiě)我們的人生吧,最后笑個(gè),哈哈,睡覺(jué)了。好累,都 2:00了
完整的pdf格式文檔51黑下載地址(共29頁(yè)):
讓你不再害怕指針.PDF
(214.83 KB, 下載次數(shù): 297)
2018-3-17 19:19 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|