計算機概論:C/C++程式設計
|
第5章、陣列和指標 |
|
|
授課教師:陳慶瀚 WWW : http://www.miat.ee.isu.edu.tw/cpp E-mail : pierre@isu.edu.tw |
|
5.4 使用指標 如果問那些學過C/C++語言的人,哪一個主題是它們遇過最大的障礙,大部分人應該都會回答:指標(Pointer)。指標確實是C/C++語言當中最難駕馭的技術課題,但是它同時也是讓C/C++語言成為高階語言中擁有最高效能和最大彈性的關鍵。儘管不是事實─但在許多人的心目中,對指標的熟稔程度甚至成為衡量一個C/C++程式設計師功力的衡量標準。 對於非資訊專業的科學計算或工程應用人員,可能會覺得指標的用法難以掌握,甚至在面對「指標滿天飛」的C/C++程式原始碼,常常覺得無從下手,因為無法解讀其設計涵義,當然更難以維修或擴充其原始碼。對此,我們將從科學和工程計算的實用觀點來介紹指標的概念和用法,在效率及功能不受影響的情況下,我們儘可能不使用指標,以維持C/C++程式設計的簡易和直覺特性。但是有三種應用場合,使用指標仍然是必要的。第一是字串(string)的宣告;第二是動態記憶體配置(dynamic memory allocation);第三是函式的陣列傳遞。
圖5.1 指標變數與指標的變數值
如果我們宣告一個指標變數,則該變數所存放的值就是一個記憶體位址,但如果我們宣告一個一般變數,如何能夠知道這個變數位於那個記憶體位址?C/C++語言提供一個可取得任意變數記憶體位址的運算子,稱為取址運算子─"&", 其應用模式如下例:
addr = &val; val = 40 &val = 0012FEE0 addr = 0012FEE0 *addr = 40 由於每次執行程式時,系統所配置的記憶體位置可能有所不同,所以你的結果中間兩行可能跟我們的不同,但這兩行彼此應該是相同的,也就是說&val和add指的是同一個記憶體,就是0012FEE0,至於這個記憶體所儲存的內容val,應該跟*addr一樣,都是40。
|
||
計算機概論:C/C++程式設計 義守大學電機系 陳慶瀚 |