淺談指標 (轉)
此文僅適合初學C語言的朋友,凡是學了幾個月以上的不要對此文內容嗤之以鼻。:namespace prefix = o ns = "urn:schemas--com::office" />
C語言最具特色的是什麼?指標。這個答案好像是公論,無論高手還是低手,菜鳥還是老鳥,學過的還是沒學過的,但凡是聽說過C的,都能回答出來。正是因為C引入了指標的概念,使得他是最接近機器真實模型的高階語言,以至於得到了“中級語言”的稱號;象我這樣有時候比C用的還多的人體會的更深——微控制器,我只會彙編,雖然現在開始學C,還是覺得怪怪的。
因此,指標是學習C必須掌握的,如果你畏懼它,不如換一門沒有指標的語言。下面有個小例子,希望你能從中得到一些啟發。
#include
void main()
{
int a = 10000;/*-------1*/
int* p, d;/*--------------2*/
p = &d;/*---------------3*/
p = (int*)a;/*-----------4*/
printf("%d %d", a, *p);
}
我來簡單講解一下:
是這樣寫int *p好還是這樣寫int* p好?
這兩種用法都是可以的,並且每種寫法都有擁護者。指標運算子是向右結合的,如果你象2語句那樣寫,實際上d還是int型別,而不是指標型別,贊成int *p寫法的,就是出於這個原因。你說我把int*用括號括起來不就行了,但是會把這樣的寫法當成是型別轉換,而不是型別定義。贊成int* p寫法的,原因就是直觀,很清晰的表示p是個整型的指標。例如這樣的寫法int* p = &a;換成int *p = &a;就很讓人費解。為了避免象2語句的誤解,有個規則就是,一行只定義一個指標。
具體怎樣寫,要看個人習慣,每種寫法人們都是認可的。
指標的危險性
指標實際上就是一個存有地址的變數,用指標訪問就相當於間接定址。很顯然,你可以給指標賦不同的數值,這樣就能訪問任意的記憶體——太危險了,例如4語句。在16位中,你對這種使用毫無辦法。幸運的是,在32位系統中,這種使用被禁止了。
指標的型別
你說指標不就是一個存有記憶體地址的變數嗎,既然都是“記憶體地址”型別,幹什麼還要型別啊。但是需要注意的是,當你從指標還原的時候,它指向的那塊記憶體,究竟是按照整型來用啊還是別的什麼結構?從這個角度來說,當你很清楚指標指向的記憶體的內容,做指標型別變換也是允許的。
關於指標,每本C語言書籍都有很詳細的介紹,我就不再多說了。當你粗淺的瞭解彙編的時候,相信你會對指標有更深刻的理解。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-956765/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【原創】淺談指標(一)指標
- 【原創】淺談指標(二)指標
- 【原創】淺談指標(三)指標
- 【原創】淺談指標(四)指標
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- 【原創】淺談指標(十一)alloca函式指標函式
- 【原創】淺談指標(十二)關於static(上)指標
- 【原創】淺談指標(九)二維陣列和多級指標相關指標陣列
- 【原創】淺談指標(七)字串相關(詳細版本)與指標運算指標字串
- 【原創】淺談指標(八)字串相關函式(下集)指標字串函式
- 【原創】淺談指標(十)連結串列的寫法指標
- 淺談script標籤
- 淺談電商搜尋資料指標體系建設指標
- 淺談微服務轉型微服務
- 迴流出價工具 淺層迴流指標 深層ROI指標指標
- 淺析weak指標的實現指標
- 轉載分享:淺談引導盤
- 淺談JavaScript的型別轉換JavaScript型別
- 淺談對標記永久化的理解
- Js 跟手轉動的羅盤指標JS指標
- 淺談測試生涯如何轉型升級
- 淺淺談ReduxRedux
- python 指標拷貝,淺拷貝和深拷貝Python指標
- C++智慧指標學習——小談引用計數C++指標
- 淺談文字詞向量轉換的機制embedding
- 淺淺淺談JavaScript作用域JavaScript
- 談談透過有效的指標設計推動運營成功的方法指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- 詳解c++指標的指標和指標的引用C++指標
- 陣列指標,指標陣列陣列指標
- 談指神通
- 淺談WebSocketWeb
- 淺談HTMLHTML
- ZooKeeper淺談
- ElasticJob淺談AST
- 淺談flutterFlutter
- 淺談JMM
- Celery淺談
- 淺談JavaScriptJavaScript