計算機概論: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);第三是函式的陣列傳遞。


指標變數(Pointer Variable)

指標(pointer)是一種用來指示資料存在於記憶體中的位址標示器,其宣告方式為
資料型別 *變數名稱 ;
資料型別通常是基本的資料型別,如int, float, char等,變數名稱與一般變數的命名法則相同,差異處在於名稱前加上一個星號*。只要在變數宣告時,變數名稱加上一個前飾符號*,該變數就是指標變數,例如: 
int *p ;
以上的宣告具有三個意義:
1、 p是一個指標變數;
2、 一旦宣告p是指標變數,則p代表一個記憶體位址,而*p代表此位址的資料內容;
3、 p所指向記憶體位址內的資料的變數型態為整數( int )。


 

圖5.1 指標變數與指標的變數值

取址運算子& 

 

如果我們宣告一個指標變數,則該變數所存放的值就是一個記憶體位址,但如果我們宣告一個一般變數,如何能夠知道這個變數位於那個記憶體位址?C/C++語言提供一個可取得任意變數記憶體位址的運算子,稱為取址運算子─"&", 其應用模式如下例:


/*----------------------------------------------------*/
// 範例程式5-4
// 使用取址運算子─"&"
// 陳慶瀚,2001
/*----------------------------------------------------*/


#include <iostream.h>
void main()
{
   int val=40; 
   int *addr;
   addr = &val;
   cout<<”val = ”<<val<<endl;
   cout<<”&val = ”<<&val<<endl;
   cout<<”addr = ”<<addr<<endl;
   cout<<”*addr = ”<<*addr<<endl;
}


這個程式宣告了兩個變數,一個是一般變數val並設定其初值為40,另一個是指標變數addr,我們使用&val取出val變數的記憶體位址,再指定給addr,addr是專門用來存放記憶體位址的變數,所以經過

addr = &val;
add就記錄了val變數的記憶體位址。執行這個程式,我們得到結果如下:

val = 40

&val = 0012FEE0

addr = 0012FEE0

*addr = 40

由於每次執行程式時,系統所配置的記憶體位置可能有所不同,所以你的結果中間兩行可能跟我們的不同,但這兩行彼此應該是相同的,也就是說&val和add指的是同一個記憶體,就是0012FEE0,至於這個記憶體所儲存的內容val,應該跟*addr一樣,都是40。


 

計算機概論:C/C++程式設計

義守大學電機系 陳慶瀚 
2001.11.12

 

謝孟媛 dvd -
情趣用品 -
飛鳥遊戲 -
遊戲基地 -
PATEK PHILIPPE -
xyz資訊工作坊 -
xyz軟體王 -
英文老師 -
沛納海 -
xyz軟體下載倉庫 -
基測試題 -
CARTIER 卡地亞 -
林晟數學 -
PIAGET -
費洛蒙情定 -
xyz -
軟體大補帖 -
高國華補習班 -
game淘 -
ps2台片 -
wii超級瑪莉攻略 -
情定費洛蒙 -
wii價格2011 -
xbox 360台片 -
tvgame360 -
愛馬仕 -
春藥專賣店 -
ps3價錢 2011 -
ps2遊戲王 -
wii遊戲片專賣店 -
百達翡麗 PATEK PHILIPPE -
壯陽藥品哪買 -
海賊王 -
春藥王 -
xyz軟體下載倉庫 -
壯陽食物 -
xbox360 -
催情藥 -
TISSOT 天梭 -
ps2遊戲燒錄 -
威而剛哪裡買 -
一夜情婦 -
xbox 360台片專賣 -
國中基測題庫 -
無雙遊戲網 -
xyz軟體王 -
ps2遊戲片80元 -
基測 -
xyz軟體王下載 -
GUCCI 古馳 -
南一題庫網 -
COACH -
LOUIS VUITTON -
wii超級瑪莉 -
wii價格2011 -
魔法老師 -
催情藥專賣店 -
國小翰林題庫網 -
wii遊戲片專賣店 -
遊戲天堂 -
寶格麗 -
金榜之路 -
wii遊戲片80元 -
xbox 360遊戲片 -
wii遊戲載點 -
人類費洛蒙情定 -
xbox 360台片專賣 -
催情王 -
xyz軟體之家 -
ps2遊戲片80元 -
情色小站 -
微風廣場 -
情慾之夜 -
民視文化 -
xbox360 -
蔻馳 -
ps2遊戲燒錄 -
ps3遊戲片 -
龍騰高中題庫 -
ps3台片 -
威而剛 -
ps3價錢 2011 -
軟體王下載 -
蕭邦 CHOPARD -
龍騰 -
催情藥 -
威而剛哪裡買 -
基測題目 -
HERMES 愛馬仕 -
情定費洛蒙 -
ps2台片 -
ps3遊戲片 -
wii瑪莉兄弟遊戲 -
江詩丹頓 Vacheron Constantin -
wii超級瑪莉 -
wii遊戲片在ho99小舖 -
春藥王 -
歷屆基測試題 -
窮人軟體 -
威而柔哪裡買 -
蕭邦 -
翰林題庫網 -
一夜情婦 -
wii遊戲下載 -
xbox 360遊戲 -
壯陽食物 -
ps2遊戲片 -
sogo百貨 -
台灣情色網 -
xyz軟體王下載 -
lv2011官方網 -
wii遊戲片專賣店 -
xbox 360價錢 -
歐米茄 -
雷達錶 RADO -
xyz資訊工坊 -
儒林補習班 -
壯陽藥品 -
xyz軟體王 -
窮人遊戲 -
ps2遊戲下載 -
ps3台片 -
德周 -
sogo百貨 -
費洛蒙情定 -
壯陽藥品哪買 -
催情王 -
春藥哪裡買 -
lv2011夏季新款 -
情趣用品 -
中友百貨 -
史萊姆的第一個家 -
情色論壇 -
萬寶龍 MONT BLANC -
萬國 -
ps2遊戲下載 -
春藥哪裡買 -
xyz資訊工作坊 -
龍騰文化 -
太平洋百貨 -
軟體王 -
xbox 360台片專賣 -
ps3遊戲片在ho99小舖 -
壯陽藥 -
xyz軟體銀行 -
xbox360台片 -
魔法24 -
wii遊戲片80元 -
XYZ資訊工坊 -
CARTIER -
春藥網 -
壯陽 -
xyz 軟體補給站 -
微風廣場 -
lv2011新款型錄 -
xbox 360遊戲 -
費洛蒙 -
卡地亞 -
wii遊戲下載 -
窮人天碟 -
春藥專賣店 -
gucci2011專賣店旗艦店 -
迪奧 -
CHANEL -
xyz軟體大本營 -
xbox 360遊戲片在ho99小舖 -
台北郵購網 -
BURBERRY 巴寶莉 -
伯爵 -
遠東百貨 -
陳希 -
費洛蒙mx -
時間廣場 -
漢神百貨 -
情色論壇 -
傳政 -
軟體 -
寶格麗 BVLGARI -
名牌包俱樂部 -
時間廣場 -
威而柔 -
wii瑪莉兄弟遊戲 -
lv名牌包專賣店 -
xyz軟體大本營 -
威而柔哪裡買 -
伯爵 PIAGET -
xyz軟體銀行 -
ps3遊戲下載 -
wii超級瑪莉歐 -
無名套裝 -
xyz軟體下載倉庫 -
江詩丹頓 -
林晟 -
ps3遊戲片在ho99小舖 -
威而剛 -
費洛蒙mx -
xyz軟體之家 -
HERMES -
林晟超理解數學 -
謝孟媛 -