第九章指標
【章節計畫】
【目的要求】 1、掌握指標和指標變數的概念、定義與應用;
2、掌握指標、指標變數與陣列之間的關係;
3、了解指標、指標變數與字串之間的關係;
4、掌握指標、指標變數與函式之間的關係
【教學重點】 指標和指標變數的概念、定義與應用;
指標與陣列、字串和函式之間的關係;
【教學難點】 指標與陣列、字串和函式之間的關係
【教學內容】 §9-1 指標和指標變數的概念
§9-2 指標變數的定義與應用
§9-3 陣列的指標和指向陣列的指標變數
§9-4 字串的指標和指向字串的指標變數
§9-5 返回指標值的函式
§9-6 指標陣列與主函式main()的形參
§9-7 函式的指標和指向函式的指標變數
【學時分配】 §9-1 ~ §9-3 2學時
9-4 ~ §9-7 1學時
實驗1學時
習題2學時
共計:6學時
第9章指標(第二十六講)
【授課日期周次星期】
【課題】 指標(一)
【目的與要求】 1、掌握指標和指標變數的概念、定義與應用;
2、掌握指標、指標變數與陣列之間的關係;
【教學重點】 指標、指標變數與陣列之間的關係
【教學難點】 指標、指標變數與陣列之間的關係
【教學方法】 引導講解式,實踐演示法
【教具】 電子課件、turboc2.0
【學時】 兩學時
引入 10分鐘
講授 80分鐘
小結 10分鐘
【課型】 理論教學,實踐教學
【參考資料】 譚浩強主編《c程式設計》,清華大學出版社,1999
徐建民主編《c語言程式設計》,電子工業出版社,2002
【後記】
【審批【教學內容】
9.1 指標和指標變數的概念
一、記憶體位址──記憶體中儲存單元的編號
(1)計算機硬體系統的記憶體儲器中,擁有大量的儲存單元(容量為1位元組)。
為了方便管理,必須為每乙個儲存單元編號,這個編號就是儲存單元的「位址」。每個儲存單元都有乙個惟一的位址。
(2)在位址所標識的儲存單元中存放資料。
注意:記憶體單元的位址與記憶體單元中的資料是兩個完全不同的概念。
二、變數位址──系統分配給變數的記憶體單元的起始位址
假設有這樣乙個程式:
main()
c編譯程式編譯到該變數定義語句時,將變數num 登入到「符號表」中。符號表的關鍵屬性有兩個:一是「識別符號名(id)」 ,二是該識別符號在記憶體空間中的「位址(addr)」 。
為描述方便,假設系統分配給變數num的2位元組儲存單元為 3000 和3001,則起始位址3000就是變數num在記憶體中的位址。
三、變數值的訪問──通過變數在記憶體中的位址進行
系統執行「scanf(」%d「,&num);」和「printf(」num=%d\n「, num);」時,訪問變數num值的方式可以有兩種:
例如,假設定義了這樣乙個指標變數num_pointer,它被分配到4000、4001單元,其值可通過賦值語句「num_pointer=#」得到。此時,指標變數num_pointer的值就是變數num在記憶體中的起始位址3000,如圖9-1所示。
通過指標變數num_pointer訪問變數num值的過程如下:
首先找到指標變數num_pointer的位址(4000),取出其值3000(正好是變數num 的起始位址); 然後從3000、3001中取出變數num的值(3)。
(3)兩種訪問方式的比較
兩種訪問方式之間的關係,可用某人甲(系統)要找某人乙(變數)來模擬。
一種情況是,甲知道乙在何處,直接去找就是(即直接訪問)。
另一種情況是,甲不知道乙在哪,但丙(指標變數)知道,此時甲可以這麼做:先找丙,從丙處獲得乙的去向,然後再找乙(即間接訪問)。
四、指標與指標變數
(1)指標──即位址
乙個變數的位址稱為該變數的指標。通過變數的指標能夠找到該變數。
(2)指標變數──專門用於儲存其它變數位址的變數
指標變數num_pointer的值就是變數num的位址。指標與指標變數的區別,就是變數值與變數的區別。
(3)為表示指標變數和它指向的變數之間的關係,用指標運算子「*」表示。
例如,指標變數num_pointer與它所指向的變數num的關係,表示為:
*num_pointer,即*num_pointer等價於變數num。
因此,下面兩個語句的作用相同:
num=3將3直接賦給變數num*/
num_pointer=&num使num_pointer指向num */
*num_pointer=3將3賦給指標變數num_pointer所指向的變數*/
9.2 指標變數的定義與應用
一、指標變數的定義與相關運算
[案例9.1] 指標變數的定義與相關運算示例。
/*案例**檔名:al9_
main()
程式演示]
程式運**況:
input the first number:9←┘
input the second number:6←┘
num1=9, num2=6
min=6, max=9
程式說明:
(1)第5行的if語句
如果*num1_p>*num2_p (即num1>num2),則交換指標,使num1_p指向變數num2(較小值),num2_p指向變數num1(較大值)。
(2)printf(「min=%d, max=%d\n」, *num1_p, *num2_p); 語句:通過指標變數,間接訪問變數的值。
本案例的處理思路是:交換指標變數num1_p 和num2_p的值,而不是變數num1和num2的值(變數num1和num2並未交換,仍保持原值),最後通過指標變數輸出處理結果。
二、指標變數作函式引數
1.指標變數,既可以作為函式的形參,也可以作函式的實參。
2.指標變數作實參時,與普通變數一樣,也是「值傳遞」,即將指標變數的值(乙個位址)傳遞給被呼叫函式的形參(必須是乙個指標變數)。
注意:被呼叫函式不能改變實參指標變數的值,但可以改變實參指標變數所指向的變數的值。
[案例9.3] 使用函式呼叫方式改寫[案例9.2],要求實參為指標變數。
/*案例**檔名:al9_
集合章節小結
一 選擇題 1.已知a a b 2,則 a.a a且ba b.aa且b a c.a a且b a d.aa且ba 2.設集合u a b 則a ub 等於 a.3.已知集合s 中的三個元素是 abc的三邊長,那麼 abc一定不是 a.銳角三角形 b.直角三角形 c.鈍角三角形 d.等腰三角形 4.集合a...
壓強章節總結
1 玻璃杯裡有一定質量的酒精,如圖11所示,酒精的深度為10cm,酒精重2.4n,已知玻璃杯重0.6n,杯底面積為20cm2,則 1 杯底所受的壓力 2 玻璃杯放在水平桌面上,則桌面受到的壓強為多大?2 如圖13所示的容器內裝有水,已知h1 30cm,h2 10cm,容器內的 底面積為0.5m2,則...
小學章節測試
1 乙個圓錐的底面周長是50.24厘公尺,高是10厘公尺,體積是多少立方公尺?2 乙個圓錐的體積是188.4立方公尺,它的底面半徑是2公尺,高是多少公尺?3.乙個圓錐形砂堆,底面周長是31.4公尺,高3公尺,每方砂重1.8噸,用一輛載重4.5噸的汽車,幾次可以運完?得數保留整數 5分 4.乙個圓形水...