讓你不再害怕指針
前言:復雜類型說明
要了解指針,多多少少會出現一些比較復雜的類型,所以我先介紹一下如何完全理解一個復雜類型,要理解復雜類型其實很簡單,一個類型里會出現很多運算符,他們也像普通的表達式一樣,有優先級,其優先級和運算優先級一樣,所以我總結了一下其原則:
從變量名處起,根據運算符優先級結合,一步一步分析.
下面讓我們先從簡單的類型開始慢慢分析吧:
//比*高,所以 P是一個數組,然后再與*結合,說明
//數組里的元素是指針類型,然后再與 int結合,
//說明指針所指向的內容的類型是整型的,所以
//P 是一個由返回整型數據的指針所組成的數組
int (*p)[3];
//首先從 P處開始,先與*結合,說明 P是一個指針
//然后再與[]結合(與"()"這步可以忽略,只是為
//了改變優先級),說明指針所指向的內容是一個
//數組,然后再與 int 結合,說明數組里的元素是
//整型的.所以 P 是一個指向由整型數據組成的數
//組的指針
//的指針變量的函數.
說到這里也就差不多了,我們的任務也就這么多,理解了這幾個類型,其它的類型對我們來說也是小菜了,不過我們一般不會用太復雜的類型,那樣會大大減小程序的可讀性,請慎用,這上面的幾種類型已經足夠我們用了.
1、細說指針
指針是一個特殊的變量,它里面存儲的數值被解釋成為內存里的一個地址。要搞清一個指針需要搞清指針的四方面的內容:指針的類型、指針所指向的類型、指針的值或者叫指針所指向的內存區、指針本身所占據的內存區。讓
我們分別說明。
先聲明幾個指針放著做例子:
(5)int*(*ptr)[4];//指針的類型是 int*(*)[4]
怎么樣?找出指針的類型的方法是不是很簡單?
2.指針所指向的類型
當你通過指針來訪問指針所指向的內存區時,指針所指向的類型決定了編譯器將把那片內存區里的內容當做什么來看待。
從語法上看,你只須把指針聲明語句中的指針名字和名字左邊的指針聲明符*去掉,剩下的就是指針所指向的類型。例如:
(1)int*ptr; //指針所指向的類型是int
(2)char*ptr; //指針所指向的的類型是char
(3)int**ptr; //指針所指向的的類型是int*
(4)int(*ptr)[3]; //指針所指向的的類型是int()[3]
(5)int*(*ptr)[4]; //指針所指向的的類型是int*()[4]
在指針的算術運算中,指針所指向的類型有很大的作用。
指針的類型(即指針本身的類型)和指針所指向的類型是兩個概念。當你對 C 越來越熟悉時,你會發現,把與指針攪和在一起的"類型"這個概念分成"指針的類型"和"指針所指向的類型"兩個概念,是精通指針的關鍵點之一。
我看了不少書,發現有些寫得差的書中,就把指針的這兩個概念攪在一起了,所以看起書來前后矛盾,越看越糊涂。
3.指針的值----或者叫指針所指向的內存區或地址
指針的值是指針本身存儲的數值,這個值將被編譯器當作一個地址,而不是一個一般的數值。在32 位程序里,所有類型的指針的值都是一個 32位
…………………………
…………此處省略若干字………………
…………………………
10、結束語
現在你是否已經覺得指針再也不是你所想的那么害怕了,如果你的回答是:對,我不怕了!哈哈,恭喜你,你已經掌握 C語言的精華了,C中唯一的難點就是指針,指針搞定其它小菜而已,重要的是實踐,好吧,讓我們先暫停C 的旅程吧,開始我們的C++編程,C是對底層操作非常方便的語言,但開發大型程序本人覺得還是沒有 C++方便,至少維護方面不太好做。而且C++是面向對象的語言,現在基本已經是面向對象的天下了,所以建議學 C++。C++是一門難學易用的語言,要真正掌握 C++可不是那么容易的,將基本的學完后,就學數據結構吧,算法才是永恒的,程序設計語言層出不窮,永遠學不完。學完之后就認真啃下 STL 這根骨頭吧,推薦書籍--------范型編程與 STL 和 STL 源碼剖析。如果你達到了這樣要求,再一次恭喜你,你已經是個程序高手了,甚至可以說是個算法高手,因為 STL 里有大量的精華而高效的算法。唉,已經該說再見的時候了,讓我們一起用我們的語言來譜寫我們的人生吧,最后笑個,哈哈,睡覺了。好累,都 2:00了
完整的pdf格式文檔51黑下載地址(共29頁):
讓你不再害怕指針.PDF
(214.83 KB, 下載次數: 297)
2018-3-17 19:19 上傳
點擊文件名下載附件
|