1. 程式人生 > >嵌入式系統C語言程式設計的心得體會(指標篇)

嵌入式系統C語言程式設計的心得體會(指標篇)

學習使用C語言不能不說到指標,指標的應用是C語言的特點也是精髓所在。沒掌握指標的使用方法,也就說明你不會使用C語言。當然使用手法靈活多變,並不見得都要學會,只是說在寫程式的時候要有這種思想體現在程式裡。其實程式寫的是否巧妙很大程度上就體現在指標應用上。
   嵌入式C語言程式設計裡面的指標和標準的C概念上是一致的,但是由於使用處理器的構架不同,在實現表示實際物件上略有差別。這個集中體現在有些嵌入式處理器比如AVR微控制器採用的是“哈佛”結構,資料和程式匯流排是分離的,因此,指向資料儲存區的的指標和指向程式儲存區的指標呼叫的指令是不同的,位數也是不同的。當然這些由編譯器來完成,但是我們在使用時,心中要有數,因為在指標傳遞的過程中要注意傳遞的值是否與申明的位置一致。不然可能出現錯誤。

   什麼是指標呢,不同的人也有不同的理解。我認為指標就是地址,形象一點就門牌號。一個門牌號對應一個位置空間。使用指標的時候就是到相應的空間去取值。指標的內容是我們需要的值,指標本身是指向這個內容的一個門牌號(即地址)。使用指標的時候並不需要知道指標是什麼,但是要清楚指標指向的位置內是什麼。因為門牌號只是個號,我關心的是內容不是這個號,只是在傳遞資訊的時候使用這樣一個號會讓傳遞變得容易。指標是如何讓傳遞變得容易的呢?
   先看看C語言的函式傳遞關係。函式傳遞分兩種,一種是引數,一種是返回值。傳遞進函式的引數可以很多,但是傳遞函式寫多了,會對函式的使用造成很多不便,至少編寫程式的時候打字都是很麻煩。而且會佔用更多的記憶體空間,這樣因為相同的資訊傳遞源佔用空間,傳遞地也佔用了空間。(這是對引數數量大的情況來說,當然數量少就不見得是佔用空間多,相反使用指標還可能佔用更多的空間)。C語言裡面規定傳遞返回值只能有一個,但是在實際應用的時候經常需要傳遞多個返回值,這個時候就可以使用指標方式,可以傳遞指標引數,直接修改相應儲存位置上的值,也可以將傳放返回引數結構的指標回傳。但是要特別提醒的是,使用指標回傳引數的時候傳遞的指標不能是函式內部的區域性變數,因為當函式退出的時候,區域性變數的空間回被收回,裡面的值可能回被其他函式修改。因此需要使用指標方式的後,應該在呼叫函式的上一級以上的函式申明變數,然後傳遞該變數的指標。

   指標和陣列的關係很微妙,我認為陣列和指標在使用上有很多相同的地方,只是在不同場合表達不一樣。當然陣列沒有指標靈活,陣列只是指標應用中的一個特例。
   指標的分類和基本用法見C語言的經典書籍,這就不羅嗦了。要講的就是介紹些應用例項,啟發思路。只是是啟發了我的思路。
   指標的總結,沒有之前兩篇好寫,想來想起,現在還沒水平提煉寫可以通用的心得,所以只好改用介紹例項的方式了。下篇在開始介紹。