freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言程序設(shè)計(下)ppt(已修改)

2024-12-19 21:49 本頁面
 

【正文】 C語言程序設(shè)計 (下 ) 第六章 指針 3 4 指針的基本概念 指針變量的定義與引用 指針與數(shù)組 5 指針 為什么要學(xué)習(xí)指針? 指針是 C語言一個重要的概念也是 C語言的重要特色。正確靈活的運(yùn)用指針可以有效地表示負(fù)責(zé)的數(shù)據(jù)結(jié)構(gòu)。 能動態(tài)的分配內(nèi)存,方便的使用字符串,有效的而方便的使用數(shù)組,在調(diào)用函數(shù)時能獲得一個以上的結(jié)果,能直接處理內(nèi)存單元地址等。 而這些是設(shè)計系統(tǒng)軟件非常必要的,掌握指針可以有效的使程序簡潔、緊湊、高效。 6 指針 指針的基本概念 指針的概念 “程序存儲”就是在程序運(yùn)行之前將程序和數(shù)據(jù)存入計算機(jī)內(nèi)存。所以在計算機(jī)中,所有的數(shù)據(jù)都是存放在存儲器中的。一般把存儲器中的一個字節(jié)稱為一個內(nèi)存單元,為了正確地訪問這些內(nèi)存單元,必須為每個內(nèi)存單元編號。根據(jù)一個內(nèi)存單元的編號即可準(zhǔn)確地找到該內(nèi)存單元。內(nèi)存單元的編號也叫做地址。 7 指針 指針的基本概念 指針的概念 main() {float x。 int y。 … } 變量的兩個物理意義 2022 2022 2022 2022 2022 2022 … x y 變量的內(nèi)容 變量的地址 8 指針 指針的基本概念 指針的概念 變量的存儲單元是在編譯時(對靜態(tài)存儲變量)或程序運(yùn)行時(對動態(tài)存儲變量)分配的,因此變量的地址不能人為確定,而要通過取地址運(yùn)算符 amp。獲取。例如在如下的程序段中: int a。 float b。 char c。 scanf( %d%f%c,amp。a,amp。b,amp。c) 。 由 amp。a、 amp。b和 amp。c分別得到變量 a、 b和 c的內(nèi)存地址。值得注意的是,由于常量和表達(dá)式?jīng)]有用戶可操作的內(nèi)存地址,因此 amp。不能作用到常量或表達(dá)式上。 9 指針 指針的基本概念 指針的概念 根據(jù)內(nèi)存單元的編號或地址就可以找到所需的內(nèi)存單元,通常把這個地址稱為指針。 在 C語言中,專門存放變量(或其它程序?qū)嶓w)地址的變量是指針變量。指針變量也需要存儲單元(存放地址值的整數(shù)),它本身也有地址。例如讓變量 p存放整型變量 a的地址(如圖所示),這樣,由變量 p的值(地址,圖中為1012)就可以找到變量 a,因此稱變量 p指向變量 a,變量 p就是指針變量,它存放的地址就稱為“指針”。因此,指針就是地址。 10 指針 指針的基本概念 指針的概念 有了指針變量以后,對一般變量的訪問即可以通過變量名進(jìn)行,也可以通過指針變量進(jìn)行。通過變量名或其地址(如 a或 amp。a)訪問變量的方式叫直接訪問方式; 通過指針變量(如 p)訪問它指向的變量(如 a)的方式叫間接訪問方式。 11 指針 指針變量的定義與引用 指針變量的定義與初始化 指針變量的一般定義形式為: 類型名 *標(biāo)識符; 其中“標(biāo)識符”是指針變量名,標(biāo)識符前加“ *”號表示該變量是指針變量,用于存放地址,“類型名”表示該指針變量所指向變量的類型。 12 指針 指針變量的定義與引用 指針變量的賦值 1.通過地址運(yùn)算 “ amp?!辟x值 地址運(yùn)算符“ amp?!笔菃文窟\(yùn)算符,運(yùn)算對象放在地址運(yùn)算符“ amp?!钡挠疫?,用于求出運(yùn)算對象的地址。通過地址運(yùn)算“ amp?!笨砂岩粋€變量的地址賦給指針變量。 2.指針變量的初始化 與動態(tài)變量的初值一樣,在定義了一個(動態(tài)的)指針變量之后,其初值也是一個不確定的值。可以在定義變量時給指針變量賦初值,如 float f, *p=amp。f。 則把變量 f的地址賦值給指針變量 p,此語句相當(dāng)于 float f, *p。 p=amp。f。 這兩條語句。 13 指針 指針變量的定義與引用 指針變量的賦值 3.通過其它指針變量賦值 可以通過賦值運(yùn)算符,把一個指針變量的地址值賦給另一個指針變量,這樣兩個指針變量均指向同一地址。 4.用 NULL給指針變量賦空值 除了給指針變量賦地址值外,還可以給指針變量賦空值,如 p=NULL。 14 指針 指針變量的定義與引用 指針的運(yùn)算及引用 在函數(shù)的執(zhí)行部分給指針變量賦地址值有以下幾種情況。 (1) 賦給同類型普通變量求地址運(yùn)算得到的地址值。如: int k=10, *p, *q; q=amp。k; 這時 scanf( %d,amp。k);與 scanf( %d,q);作用相同。 (2) 通過已有地址值的指針變量賦值。 (3) 通過標(biāo)準(zhǔn)函數(shù)獲得地址值。 (4) 給指針變量賦“空”值,如: p=NULL; 這樣做的目的是:讓指針變量存有確定的地址值又不指向任何變量(類似于給數(shù)值型變量賦初值 0)。 15 指針 指針變量的定義與引用 指針的運(yùn)算及引用 (1) 指向運(yùn)算符 * *運(yùn)算符作用在指針(地址)上,代表該指針?biāo)赶虻拇鎯卧捌渲担瑢?shí)現(xiàn)間接訪問,因此又叫 “ 間接訪問運(yùn)算符 ” 。如: int a=5, *p; p=amp。a; printf( %d,*p); *p的值為 5與 a等價。 *運(yùn)算符為單目運(yùn)算符,與其他的單目運(yùn)算符具有相同的優(yōu)先級和結(jié)合性(右結(jié)合性)。根據(jù) *運(yùn)算符的作用, *運(yùn)算符和取地址運(yùn)算符 amp。 互逆 : *( amp。a) ==a amp。( *p) ==p 注意,在定義指針變量時,“ *”表示其后是指針變量;在執(zhí)行部分的表達(dá)式中,“ *”是指向運(yùn)算符。 (2) 指針變量的引用 知道了指針變量的作用以及相關(guān)的運(yùn)算符以后,我們就可以引用指針變量了。 16 指針 指針變量的定義與引用 指針的運(yùn)算及引用 【 例 61】 請理解下列程序中各語句的含義: include void main( ) {int a=10,*p=amp。a。 printf(*p=%d\n,*p)。 /* 打印指針變量 p所指向的變量 a的值 10 */ printf(Enter a: )。 scanf(%d,p)。 /* 對指針變量 p所指向的變量 a的地址讀入整數(shù) */ printf(a=%d\n,a)。 printf(p=%x\n,p)。 /* 輸出指針變量 p存儲的變量 a的地址 */ printf(amp。p=%x\n,amp。p)。 /* 輸出指針變量 p自身的地址 */ *p=5。 /* 把 5賦給 p所指向的存儲單元,相當(dāng)于 a=5; */ printf(a=%d\n,a)。 (*p)++。 /* 使指針變量 p所指向的存儲單元的值自增,相當(dāng)于 a++; */ printf(a=%d\n,a)。 } 程序運(yùn)行結(jié)果 : *p=10 Enter a:15 a=15 p=13ff7c amp。p=13ff78 a=5 a=6 17 指針 指針變量的定義與引用 指針的運(yùn)算及引用 【 例 62】 輸入兩個整數(shù) i1和 i2,利用指針將大數(shù)存放到 i1中,小數(shù)存放到 i2中,最后按 i i2的順序輸出。 按題意,定義兩個指針變量 p p2,將 i i2的地址分別存入 pp2,當(dāng) i1i2時利用指針變量 p p2交換 i i2的值然后輸出。程序如下: 18 指針 指針變量的定義與引用 指針的運(yùn)算及引用 include void main( ) {int i1, i2, *p1, *p2, t。 p1=amp。i1。 p2=amp。i2。 printf(Enter two numbers:\n)。 scanf(%d%d,p1,p2)。 /* 利用指針變量輸入 i i2的值 */ if(i1i2) {t=*p1。*p1=*p2。*p2=t。} /* 利用指針變量的指向操作交換 i i2的值 */ printf(i1=%d,i2=%d\n,i1, i2)。 } Enter two numbers: 5 10 程序運(yùn)行結(jié)果 : i1=10,i2=5 19 指針 指針變量的定義與引用 指針的運(yùn)算及引用 【 思考 】 如果將變量定義改為 int i1, i2, *p1, *p2, *p; 交換 ii2值的語句改為: if(i1i2){p=p1。 p1=p2。 p2=p。}或者 if(i1i2){*p=*p1。 *p1=*p2。 *p2=*p。}將會怎樣? 【 分析 】 第一種情況是:在 i1i2的情況下,利用臨時指針變量 p交換指針變量 p p2存放的地址值,而 i i2的值沒有改變,因此題目的要求沒有實(shí)現(xiàn)(如圖 65所示)。但如果同時將輸出語句改為: printf(max=%d,min=%d\n,*p1, *p2)。 可實(shí)現(xiàn)從大到小輸出。 第二種情況是:在 i1i2的情況下,利用三個指針變量的指向操作交換 i i2的值。問題是:指針變量 p沒有存放普通變量的地址,因此也是錯誤的(運(yùn)行時有警告)。 20 指針 指針變量的定義與引用 指針的運(yùn)算及引用 【 思考 】 如果將變量定義改為 int i1, i2, *p1, *p2, *p; 交換 ii2值的語句改為: if(i1i2){p=p1。 p1=p2。 p2=p。}或者 if(i1i2){*p=*p1。 *p1=*p2。 *p2=*p。}將會怎樣? 【 分析 】 第一種情況是:在 i1i2的情況下,利用臨時指針變量 p交換指針變量 p p2存放的地址值,而 i i2的值沒有改變,因此題目的要求沒有實(shí)現(xiàn)(如圖 65所示)。但如果同時將輸出語句改為: printf(max=%d,min=%d\n,*p1, *p2)。 可實(shí)現(xiàn)從大到小輸出。 第二種情況是:在 i1i2的情況下,利用三個指針變量的指向操作交換 i i2的值。問題是:指針變量 p沒有存放普通變量的地址,因此也是錯誤的(運(yùn)行時有警告)。 21 指針 指針變量的定義與引用 指針作為函數(shù)參數(shù) 函數(shù)的參數(shù)可以是我們在前面學(xué)過的簡單數(shù)據(jù)類型,也可以是指針類型。使用指針類型做函數(shù)的參數(shù),實(shí)際向函數(shù)傳遞的是變量的地址。由于函數(shù)中獲得了所傳遞變量的地址,在該地址空間的數(shù)據(jù)當(dāng)函數(shù)調(diào)用結(jié)束后被物理地保留下來。 22 指針 指針變量的定義與引用 指針作為函數(shù)參數(shù) 【 例 63】 利用指針變量作為函數(shù)的參數(shù),用函數(shù)的方法再次實(shí)現(xiàn)上述功能。 include void main( ) {void chang( )。 /* 函數(shù)聲明 */ int *p1,*p2,a,b,*t。 scanf(%d,%d,amp。a,amp。b)。 p1=amp。a。 p2=amp。b。 chang(p1,p2)。 /* 調(diào)用函數(shù) */ printf(%d,%d\n,*p1,*p2)。 return 0。 } 23 指針 指針變量的定義與引用 指針作為函數(shù)參數(shù) void chang(int*pt1,int*pt2) /* 函數(shù)實(shí)現(xiàn)將兩數(shù)值調(diào)整為由大到小 */ {int t。 if (*pt1*pt2) {t=*pt1。*pt1=*pt2。*pt2=t。 } /* 交換內(nèi)存變量的值 */ return。 } 由于在調(diào)用函數(shù)時,實(shí)際參數(shù)是指針變量,形式參數(shù)也是指針變量,實(shí)參與形參相結(jié)合,傳值調(diào)用將指針變量傳遞給形式參數(shù) pt1和 pt2。但此時傳值傳遞的是變量地址,使得在函數(shù)中 pt1和 pt2具有了 p1和 p2的值,指向了與調(diào)用程序相同的內(nèi)存變量,并對其在內(nèi)存存放的數(shù)據(jù)進(jìn)行了交換,其效果與例 62相同。 24 指針 指針變量的定義與引用 多級指針的概念 按照上述二級指針的思路,顯然可以推廣到三級指針、四級指針 …… 。使用多級指針變量的要點(diǎn)是:① 多級指針變量均用基類型定義,定義幾級指針變量要將變量名前放幾個 “ *” 號;② 各指針變量均應(yīng)取得低一級指針變量的地址后才能引用;③ 引用幾級指針變量訪問最終的普通變量時,變量名前需用幾個指向運(yùn)算符 “ *” 號。 25 指針 指針變量的定義與引用 多級指針的概念 【 例 64】 運(yùn)行下面的程序 include void main( ) {int *p1, **p2, ***p3, ****p4,
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1