第5章、陣列和指標 - C/C++
文章推薦指數: 80 %
但是有三種應用場合,使用指標仍然是必要的。
第一是字串(string)的宣告;第二是動態記憶體配置(dynamic memory allocation);第三是函式的陣列傳遞。
指標變數(Pointer ...
計算機概論:C/C++程式設計
第5章、陣列和指標
授課教師:陳慶瀚
WWW
:http://www.miat.ee.isu.edu.tw/cpp
E-mail:[email protected]
5.4使用指標
如果問那些學過C/C++語言的人,哪一個主題是它們遇過最大的障礙,大部分人應該都會回答:指標(Pointer)。
指標確實是C/C++語言當中最難駕馭的技術課題,但是它同時也是讓C/C++語言成為高階語言中擁有最高效能和最大彈性的關鍵。
儘管不是事實─但在許多人的心目中,對指標的熟稔程度甚至成為衡量一個C/C++程式設計師功力的衡量標準。
指標的複雜度來自它對實體記憶體位置的操作,大多數的高階語言基於系統的安全性和程式的高階抽象化設計的理念,通常都不允許對實體記憶體位置進行操作,因為一旦對實體記憶體進行不當的存取,就有可能造成程式的異常當機,甚至波及系統程式的穩定性。
但從另一個角度看,適當的使用指標可以讓工程師更貼近硬體(記憶體)的層次,因此將有利於設計出更節省資源、更高效能的程式。
對於非資訊專業的科學計算或工程應用人員,可能會覺得指標的用法難以掌握,甚至在面對「指標滿天飛」的C/C++程式原始碼,常常覺得無從下手,因為無法解讀其設計涵義,當然更難以維修或擴充其原始碼。
對此,我們將從科學和工程計算的實用觀點來介紹指標的概念和用法,在效率及功能不受影響的情況下,我們儘可能不使用指標,以維持C/C++程式設計的簡易和直覺特性。
但是有三種應用場合,使用指標仍然是必要的。
第一是字串(string)的宣告;第二是動態記憶體配置(dynamicmemoryallocation);第三是函式的陣列傳遞。
指標變數(PointerVariable)
指標(pointer)是一種用來指示資料存在於記憶體中的位址標示器,其宣告方式為
資料型別*變數名稱;
資料型別通常是基本的資料型別,如int,float,char等,變數名稱與一般變數的命名法則相同,差異處在於名稱前加上一個星號*。
只要在變數宣告時,變數名稱加上一個前飾符號*,該變數就是指標變數,例如:
int*p;
以上的宣告具有三個意義:
1、p是一個指標變數;
2、一旦宣告p是指標變數,則p代表一個記憶體位址,而*p代表此位址的資料內容;
3、p所指向記憶體位址內的資料的變數型態為整數(int)。
圖5.1指標變數與指標的變數值
取址運算子&
如果我們宣告一個指標變數,則該變數所存放的值就是一個記憶體位址,但如果我們宣告一個一般變數,如何能夠知道這個變數位於那個記憶體位址?C/C++語言提供一個可取得任意變數記憶體位址的運算子,稱為取址運算子─"&",其應用模式如下例:
/*----------------------------------------------------*/
//範例程式5-4
//使用取址運算子─"&"
//陳慶瀚,2001
/*----------------------------------------------------*/
#include
延伸文章資訊
- 1C++教學(二十一):指標陣列 - 痞客邦
C++教學(二十一):指標陣列指標即然也是變數的一種,有時為了集合資料與處理上的方便,我們也可以使用陣列的方式來管理指標變數,宣告指標陣列的方式與 ...
- 2C++語言程式設計筆記- 第6章- 陣列、指標與字串 - IT人
文章目錄第6章陣列、指標與字串6.1 陣列6.1.1 陣列的宣告與使用6.1.2 陣列的儲存與初始化6.1.3 陣列作為函式引數6.1.4 物件陣列6.2 指標6.2.1 記憶體 ...
- 3指標與陣列 - OpenHome.cc
在宣告陣列之後,使用到陣列變數時,會取得首元素的位址,例如在下面的程式中將指出,陣列 arr 與 &arr[0] 的值是相同的: #include <iostream> using namesp...
- 4動態記憶體配置 - C/C++
m = new int[1000]; //配置1000個整數的記憶空間給指標變數m,m即為一個陣列. 一旦不再需要這個動態配置的陣列,我們還可以把記憶體釋放出來,以便讓程式有更大的記憶 ...
- 5C++ 中指向陣列的指標| D棧 - Delft Stack
即使C++ 試圖用引用替換其某些用例,但指標仍然只是內建資料型別,可用於直接處理記憶體。請注意,C 風格的陣列本質上是指向起始元素的指標,並且由於 ...