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

正文內(nèi)容

從問題到程序ppt課件-展示頁

2024-11-12 16:54本頁面
  

【正文】 間的數(shù)組元素個數(shù) ( 帶符號整數(shù) ) 。 p2。 /* 這使 p2改指向 a[3] */ 用增 /減量操作做指針更新 ( 指針應(yīng)指在數(shù)組里 ) : p3 = p2。 這類運算稱為“指針運算”。 /* 給 a[3]賦值 */ 通過指針訪問數(shù)組元素時必須保證不越界 。 /* 使 p2指向 a[5] */ 也可由指向非首元素的指針出發(fā)訪問數(shù)組其他元素: *(p2 + 2) = 5。 例: *(p1 + 2) = 3。 p1+ p1+ …也合法,分別為 a其他元素的地址。這時由 p可以訪問被 p指的元素,還可訪問數(shù)組的其他元素?!笨珊唽憺椋? p1 = a。 “ p1 = amp。 C語言保證這個地址存在,但寫 *p4 是錯誤的 。a[10]。a[5]。 p2 = p1。 可以寫: p1 = amp。 假定有定義: int *p1, *p2, *p3, *p4。 指針和數(shù)組的關(guān)系是 C語言特有的 , 除了由 C派生出的語言 ( 如 C++) , 一般語言中沒有這種關(guān)系 。 常能使程序更加簡潔有效 。 通用指針 不能做間接運算 ? 被普通指針指向的變量的類型明確,間接后可以作為該類型的變量使用 ? 通用指針可以指向任何變量,通過通用指針間接訪問的意義無法確定。從整型指針轉(zhuǎn)換到通用指針就是丟掉類型信息。被整型指針?biāo)傅淖兞靠偪闯墒钦偷淖兞?;被雙精度指針指向 …… 。 ? 將該地址賦給 double指針,就造成了混亂。 指針類型轉(zhuǎn)換并不改變指針值 ? 將整型變量 n的地址賦給通用指針 gpt, gpt存的就是n的地址。/*不合法 , q是 (double*) */ 其他使用方式?jīng)]有任何保證。 p = (int*)gp1。gp1 = amp。x。n。 任何指針值可以賦給通用指針 ( 不必轉(zhuǎn)換 ) 。 double x, *q。 通用指針 類型 (void*), 可以指向任何變量 。 有些系統(tǒng)可能對第一個例子 ( 假設(shè) p未初始化 ) 給出警告 。 scanf(..., n)。n)。 間接訪問懸空指針是嚴(yán)重錯誤,后果可能很嚴(yán)重。 ... } p沒有初始化 , 沒有指向合法變量 。如: int f (...) { int *p, n = 3。 若沒有初始化 , 外部指針和局部靜態(tài)指針自動初始化為用空;局部自動指針不自動初始化 。 指針初始化 指針變量定義時可用合法指針值初始化: int n, *p = amp。 和 p = 0。 與指針有關(guān)的一些問題 空指針值: 一個特殊指針值,表示指針變量閑置(未指向任何變量)。 這里可以看到標(biāo)準(zhǔn)庫函數(shù) scanf的樣子。 更合適的調(diào)用形式: if (getnumber(Your guess: , 0, m1, 5, amp。 getnumber(Your guess: , 0, m1, 5, amp。 } 前面的調(diào)用現(xiàn)在可以重寫為: getnumber(Choose a range [0, n]. Input n: , 2, 32767, 5, amp。 } else return 1。\n39。 if (scanf(%d, np)!=1 || *npimin || *npimax) { printf(Correct range [%d, %d].\n, imin, imax)。 repeat=0 || irepeat。 新函數(shù)定義: int getnumber(char prompt[], int imin, int imax, int repeat, int *np) { int i。用函數(shù)返回值傳遞函數(shù)執(zhí)行的狀態(tài)信息。 前面實現(xiàn)里用特殊整數(shù)值指明輸入出錯,有很大缺點(可能不存在合適的值)。 scanf采用與 swap一樣的技術(shù) , 通過間接訪問為指定變量賦值 , 把輸入的值賦給指定變量 。 介紹標(biāo)準(zhǔn)庫函數(shù) scanf時 , 強調(diào)在接受輸入的變量前必須寫 amp。a[1],amp。a[5])。 調(diào)用 swap的實例: swap(amp。m, amp。 swap的參數(shù)類型是 (int *), 實參 必須是 合法的整型變量的地址 。m, amp。 *q = t。 函數(shù) swap可定義為: void swap(int *p, int *q) { int t = *p。 } 請回憶 scanf的情況。 printf(%d, %d\n, n, m)。 /* 設(shè)置 n和 m */ set3(amp。 set3(amp。 g 的 函數(shù)體參數(shù) p變量 m在函數(shù)體里用 *p 可以訪問和改變實參變量 m.圖  在函數(shù)里通過指針可以訪問外面的變量例,通過函數(shù)調(diào)用把變量值設(shè)置為 3: void set3(int * np) { *np = 3。 用指針可以解決問題。 … /*不行 */ } 函數(shù)內(nèi)修改形參,不會改變調(diào)用時的實參。 } int f(…) { int a = 5, b = 10。 x = y。 因為要改變兩個變量 , 無法通過返回值解決 。利用 指針可以改變這種情況。但用 g改變 f局部變量的唯一方法是將 g的返回值賦給 f的局部變量。 前面函數(shù)的特點:可使用調(diào)用處環(huán)境中變量的值(通過參數(shù)),但不能修改這些變量(數(shù)組參數(shù)除外)。/* 指針 q指向了數(shù)組 a的元素 */ 指針作為函數(shù)參數(shù) 指針作為函數(shù)參數(shù)有特殊意義,利用這種參數(shù)可寫出能修改調(diào)用時環(huán)境的函數(shù)。 /* 變量 n被賦以新值 57 */ q = amp。 /* 使變量 n的值再加 1, 變成 19。 /* 訪問 n三次 */ ++ *p。 這里寫 *p相當(dāng)于直接寫 n。 設(shè) p指向 n。變量相等是值相等,兩個指針變量相等說明它們指向程序里同一東西。a[1]。 q = p。例: p = amp。都是一元運算符 指針變量 p變量 n圖  兩個指針指向同一個變量的情況指針變量 q取地址運算 amp。 指針操作 取地址運算符 amp。 應(yīng)賦給類型正確的指針值 , 取出的值是特定類型的指針值 。 指針變量可以與其他變量一起定義: int *p, n, a[10], *q, *p1, m。 定義指針需指明 指向類型 。 p所指也看作 int,從 p間接訪問當(dāng)作 int。這種新的靈活性很有用。 現(xiàn)在 p指向 x,以后可能指向 y。掌握有難度,易用錯,應(yīng)特別注意。指針使用的水平是評價人的 C程序設(shè)計能力的重要方面。有些問題必須用指針處理。 指針 p保存著變量 x地址,也說指針 p指向 x。 指針還能保存其他對象的地址。 指針的主要操作 ? 指針賦值:將程序?qū)ο蟮牡刂反嫒胫羔樧兞?。以地址為值的變量稱為 指針變量 /指針 (pointer)。 問題:地址作為數(shù)據(jù)有什么用? 若程序可以處理對象地址,就可通過地址處理相關(guān)對象。本章不考慮寄存器變量。 任何變量在存在期間總有確定存儲位置,有固定 地址 。再調(diào)用時重新安排存儲 。賦值時存入,用值時從中提取 外部變量 /靜態(tài)變量有全局存在期,程序執(zhí)行前安排存儲位置,保持到程序結(jié)束。高級語言用變量等作為存儲單元 /地址的抽象。 內(nèi)存單元的編號: 地址 。從問題到程序 第七章,指針 程序執(zhí)行中數(shù)據(jù)存于內(nèi)存。 在可用期間數(shù)據(jù)有確定存儲位置,占據(jù)一些存儲單元。 機器語言通過地址訪問數(shù)據(jù)。 建立變量就是安排存儲。 自 動變量在函數(shù)調(diào)用時安排存儲,至函數(shù)結(jié)束。 地址與指針 變量 存在期 就是它占據(jù)所安排存儲的期間。 寄存器變量可能放在寄存器,無地址。 變量存在時有地址,地址用二進制編碼,因此可能成為程序處理的 數(shù)據(jù) 。 對象(如變量)地址也被作為 數(shù)據(jù) , 地址值 /指針值 。 指針是一種訪問其他對象的手段 ,利用這種機制能更靈活方便地實施對各種對象的操作。 ? 間接訪問:通過指針訪問被指對象。下面討論以變量為例。圖示: 指針變量 p變量 x圖  指針與被指的變量在 C中使用指針常能寫出更簡潔有效的程序。 指針在大型復(fù)雜軟件中使用廣泛。 C指針靈活 /功能強。應(yīng)特別注意使用指針的常見錯誤, 注意! 指針是變量,可賦值,其指向可以改變。 通過 p訪問被指對象的 語句 目前訪問 x,后來就訪問 y。 指針變量的定義和使用 指針有類型,只能保存特定類型的變量的地址 指向 int的指針 p只能指向 int變量。常說 int指針 p1等。 定義指向 int的 指針變量 : int *p, *q。 指針是 變量 , 可賦值取值 , 有定義域與存在期 。 用 (int*)表示整型指針的類型 , 其他類似 。 和間接訪問操作 *。 寫在變量描述 (如變量名)前 取 變量地址,是對應(yīng)類型的指針值,可賦給類型合適的指針。n。 p1 = amp。 多個指針可能同時指向同一變量。 間接運算 間接運算得到被指針?biāo)傅淖兞?, 這種表達式可以像普通變量一樣使用 。 間接賦值: *p = 17。 另一個賦值: m = *p + *q * n。 /* 使變量 n的值加 1, 變成 18 */ (*p)++。 */ *p += *q + n。a[0]。 函數(shù)調(diào)用處的環(huán)境 指在調(diào)用函數(shù)的位置能訪問的變量全體。 在函數(shù) f里調(diào)用 g,可將 f的局部變量作為實參。 這種方法局限性太強,例如無法在一個函數(shù)調(diào)用中修改兩個局部變量的值。 例:定義函數(shù) swap, 希望用它交換兩個變量的值 。 下面定義不行: void swap0 (int x, int y) { int t = x。 y = t。 swap0(a, b)。 分析 :要(在一函數(shù)里)通過 調(diào)用函數(shù) g修改調(diào)用處的變量(如局部變量),必須在 g里 掌握 這個 變量。 把 m的地址(也是值)通過指針參數(shù) p傳給 g,函數(shù)內(nèi)對p間接訪問就能操作 m,包括對 m賦值(改變 m)。 } 使用實例: int main() { int n, m。n)。m)。 return 0。 通過參數(shù)改變調(diào)用環(huán)境的方案 包括三方面: 1. 函數(shù)定義中用 指針參數(shù) ; 2. 函數(shù)內(nèi)用 間接操作 實際變量; 3. 調(diào)用時以被操作 變量的地址 作為實參。 *p = *q。 } 交換變量 m和 n的值 , 調(diào)用形式是: swap(amp。n)。 swap 的 函數(shù)體p變量 m圖  函數(shù)調(diào)用 swap(amp。n) 形成的現(xiàn)場變量 nq設(shè)有變量定義: int a[10], k。a[0],amp。 swap(amp。k)。 就是將變量的地址傳給 scanf。 例:改造上章輸入整數(shù)值并檢查值范圍的函數(shù),引進指針參數(shù),使之能更好處理輸入錯誤。 指針參數(shù)提供了另一種方法: 函數(shù)增加一個指針參數(shù),通過它送回讀入值。 返回 1表示輸入成功, 0表示輸入未能正常完成。 for (i = 0。 ++i) { printf(%s, prompt)。 while (getchar() != 39。) 。 } return 0。m)。guess)。guess) == 0) { … /* 處理輸入出錯的程序片段 */ } 這類函數(shù)的形參為指針,實參必須是合法變量地址。通過返回值表示函數(shù)的工作情況,是 一種 常用技術(shù)。唯一對任何指針類型都合法的值 空指針值用 0表示,標(biāo)準(zhǔn)庫專門定義了符號常量 NULL p = NULL。 相同 前一寫法易看到是指針 , 用時必須包含標(biāo)準(zhǔn)頭文件 。n, *q = NULL。 指針使用中的常見錯誤 使用指針的最常見錯誤是 非法間接訪問 :在指針未指向合法變量的情況下做間接。 *p = 2。 “懸空指針”指值不是(當(dāng)時)合法的變量地址的指針變量,也常被稱為“野指針”。 常見錯誤寫法(設(shè) p是懸空 int指針, n是 int變量): swap(p, amp。 scanf(..., p)。 編譯程序不能發(fā)現(xiàn) scanf的錯誤 。 間
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1