第8章指針和引用.ppt_第1頁(yè)
第8章指針和引用.ppt_第2頁(yè)
第8章指針和引用.ppt_第3頁(yè)
第8章指針和引用.ppt_第4頁(yè)
第8章指針和引用.ppt_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章 指針和引用 本章主要內(nèi)容 8 1指針和指針變量8 2指針運(yùn)算8 3指針和數(shù)組8 4指針數(shù)組和多級(jí)指針8 5指針和函數(shù)8 6new和delete運(yùn)算符8 7引用和其他類(lèi)型的指針8 8簡(jiǎn)單鏈表8 9類(lèi)型定義 8 1指針和指針變量 8 1 1指針的概念8 1 2指針變量的說(shuō)明 8 1 1指針的概念 指針 一個(gè)變量的地址 一個(gè)內(nèi)存單元的地址 變量的地址 該變量所占存儲(chǔ)單元的首地址 變量的值 內(nèi)存單元中的內(nèi)容 變量地址的表示 變量名 取地址運(yùn)算符 指針變量 專(zhuān)門(mén)存放變量地址的變量 8 1 2指針變量的說(shuō)明 指針變量與其他類(lèi)型的變量一樣 必須先說(shuō)明后使用 說(shuō)明格式為 存儲(chǔ)類(lèi)型 類(lèi)型 變量名1 變量名2 其中 存儲(chǔ)類(lèi)型是可任選的 變量名前的星號(hào) 指明所說(shuō)明的變量為指針變量 而類(lèi)型則指出指針變量所指向的數(shù)據(jù)類(lèi)型 1 指針的類(lèi)型從語(yǔ)法的角度看 只要把指針聲明語(yǔ)句里的指針名字去掉 剩下的部分就是這個(gè)指針的類(lèi)型 2 指針?biāo)赶虻臄?shù)據(jù)類(lèi)型當(dāng)通過(guò)指針來(lái)訪問(wèn)指針?biāo)赶虻膬?nèi)存區(qū)域時(shí) 指針?biāo)赶虻念?lèi)型決定數(shù)據(jù)類(lèi)型 了編譯器將把那片內(nèi)存區(qū)里的內(nèi)容當(dāng)做什么來(lái)看待 8 2指針運(yùn)算 8 2 1指針的賦值運(yùn)算8 2 2指針的算術(shù)運(yùn)算8 2 3指針的關(guān)系運(yùn)算 8 2 1指針的賦值運(yùn)算 指針賦值運(yùn)算常見(jiàn)的形式如下 1 將一個(gè)變量的地址以 運(yùn)算的結(jié)果形式賦給一個(gè)同類(lèi)型的指針 2 將另一同類(lèi)型的指針值賦給某一指針 3 在C 中可以將0賦給任一指針變量 其含義是初始化指針變量 使其值為 空 例8 1指針的賦值運(yùn)算例8 2指針的賦值運(yùn)算例8 3指針的賦值運(yùn)算 8 2 2指針的算術(shù)運(yùn)算 左值所能進(jìn)行的算術(shù)運(yùn)算有兩種 一是指針變量與一個(gè)整數(shù)的加或減運(yùn)算 二是自增 自減運(yùn)算 1 與整數(shù)的加或減運(yùn)算如果指針變量的定義為datatype p p初始地址值為DS 那么p n DS n sizeof datatype 指針加法的單位是指針對(duì)應(yīng)類(lèi)型的字節(jié)數(shù) 例8 4與整數(shù)的加或減運(yùn)算2 指針的自增或自減指針的自增或自減表示指針從當(dāng)前位置向后或向前移動(dòng)sizeof 數(shù)據(jù)類(lèi)型 長(zhǎng)度的存儲(chǔ)單元 指向下一個(gè)或上一個(gè)元素例8 5指針的自增或自減 8 2 3指針的關(guān)系運(yùn)算 指針變量可以進(jìn)行關(guān)系運(yùn)算 兩個(gè)指針變量的關(guān)系運(yùn)算是根據(jù)兩個(gè)指針變量值的大小 作為無(wú)符號(hào)整數(shù) 來(lái)進(jìn)行比較的 通常只有同類(lèi)型的指針變量進(jìn)行比較才有意義 相等 比較的含義是判斷兩個(gè)指針變量是否指向相同的內(nèi)存單元 即兩個(gè)指針值是否相同 而不等比較 的含義是判斷兩個(gè)指針變量是否指向不同的內(nèi)存單元在C 中 同一個(gè)符號(hào)可能表示不同的運(yùn)算符 編譯器根據(jù)運(yùn)算符的優(yōu)先級(jí) 操作數(shù)的類(lèi)型及個(gè)數(shù)來(lái)區(qū)分的 例8 6指針的關(guān)系運(yùn)算例8 7混合運(yùn)算及其優(yōu)先級(jí) 8 3指針和數(shù)組 8 3 1指針與一維數(shù)組8 3 2指針與多維數(shù)組8 3 3指針和字符串 8 3 1指針與一維數(shù)組 如圖8 3所示 定義一個(gè)數(shù)組a 10 和一個(gè)指針pa inta 10 pa pa a Apa BA B行的效果是一樣的 都是把數(shù)組的首地址賦給指針 引用一個(gè)數(shù)組元素 有3種方法 1 下標(biāo)法 a i 2 數(shù)組名地址法 a i 3 指針?lè)?指針地址法 pa i 指針下標(biāo)法 pa i 圖8 3一維數(shù)組與指針示意圖 例8 8一維數(shù)組與指針 8 3 2指針與多維數(shù)組 在C 中 二維數(shù)組的各個(gè)元素值按行的順序在一片連續(xù)的內(nèi)存空間中存放 行數(shù)組首地址a 相當(dāng)于 a 0 行元素a i 即為 a i 實(shí)際為各列數(shù)組首地址 各列數(shù)組首地址a i 相當(dāng)于 a i 0 列元素地址 a i j 可用a i j或者 a i j表示 圖8 4所示為二維數(shù)組與指針的關(guān)系示意圖 圖8 4二維數(shù)組與指針關(guān)系示意圖 例8 9二維數(shù)組與指針例8 10用指針變量輸出二維數(shù)組 8 3 3指針和字符串 用字符指針表示字符串有3種方法 1 指向字符數(shù)組 讓字符指針與存放字符串的字符數(shù)組關(guān)聯(lián) 就可以用字符指針表示該字符串 2 直接定義指針并初始化 讓它指向指定的字符串 3 直接將字符串常量賦予字符指針例8 11指針與字符串 8 4指針數(shù)組和多級(jí)指針 8 4 1指針數(shù)組8 4 2指向一維數(shù)組的指針變量8 4 3多級(jí)指針 8 4 1指針數(shù)組 指針數(shù)組是指針變量的集合 它的每一個(gè)元素都是一個(gè)指針 且具有相同的數(shù)據(jù)類(lèi)型 其一般的定義格式為 存儲(chǔ)類(lèi)型 數(shù)據(jù)類(lèi)型是指針?biāo)赶蜃兞康臄?shù)據(jù)類(lèi)型 因?yàn)?的優(yōu)先級(jí)高于 指針與 構(gòu)成一個(gè)數(shù)組 再與 結(jié)合 指明是一個(gè)指針數(shù)組 數(shù)據(jù)類(lèi)型指明指針數(shù)組中每個(gè)元素所指變量的類(lèi)型 例8 13指針數(shù)組輸出例8 14將字符串降序后輸出 8 4 2指向一維數(shù)組的指針變量 可以聲明一個(gè)指針變量使其只能指向一維數(shù)組 聲明的格式為 要注意這樣兩種寫(xiě)法 int p 4 定義了一個(gè)指針數(shù)組 該數(shù)組有4個(gè)指針元素int p 4 定義了一個(gè)指針 該指針指向一個(gè)有4個(gè)元素的數(shù)組因?yàn)檫\(yùn)算符 的優(yōu)先級(jí)高于 所以用圓括號(hào) 將 與指針變量名括起來(lái)以改變運(yùn)算符的優(yōu)先級(jí)順序 使 先作用于指針變量 然后再與 結(jié)合 形成指向一維數(shù)組的指針變量 例8 15指向一維數(shù)組的指針變量 8 4 3多級(jí)指針 如果指針變量中存放的是另一個(gè)指針的地址 就稱(chēng)該指針變量為指向指針的指針變量 指向指針的指針變量也稱(chēng)為二級(jí)指針 其聲明的語(yǔ)法格式為 兩個(gè)符號(hào) 表示后面聲明的變量為指向指針的指針變量 例8 16通過(guò)多級(jí)指針訪問(wèn)指針數(shù)組元素例8 17多級(jí)指針的簡(jiǎn)單應(yīng)用 8 5指針和函數(shù) 8 5 1指針作為函數(shù)的參數(shù)8 5 2返回指針的函數(shù)8 5 3指向函數(shù)的指針8 5 4帶參數(shù)的main 函數(shù) 8 5 1指針作為函數(shù)的參數(shù) 當(dāng)形參為指針時(shí) 實(shí)參可以是一個(gè)基類(lèi)型相同的指針變量或變量的地址 當(dāng)函數(shù)的參數(shù)為指針時(shí) 可將指針值和指針?biāo)赶虻臄?shù)據(jù)作為函數(shù)的輸入?yún)?shù) 即在函數(shù)體內(nèi)可使用指針值和指針?biāo)赶虻臄?shù)據(jù)值 也可將指針?biāo)赶虻臄?shù)據(jù)作為函數(shù)的輸出參數(shù) 即在函數(shù)體內(nèi)改變了形參指針?biāo)赶虻臄?shù)據(jù)值 調(diào)用函數(shù)后 實(shí)參指針?biāo)赶虻臄?shù)據(jù)也隨之改變 例8 18用值傳遞和地址傳遞實(shí)現(xiàn)兩個(gè)數(shù)據(jù)的交換例8 19形參為指針 實(shí)參為數(shù)組名和指針例8 20形參為數(shù)組名 實(shí)參為數(shù)組名和指針 8 5 2返回指針的函數(shù) 函數(shù)的返回值可以為整型 實(shí)型 雙精度型 字符型數(shù)據(jù) 也可以為指針 返回指針值的函數(shù)的定義方法如下 類(lèi)型說(shuō)明符 函數(shù)名 參量表列 函數(shù)體 其中類(lèi)型說(shuō)明符為函數(shù)返回的指針指向的數(shù)據(jù)類(lèi)型 例8 21返回指針的函數(shù)例8 22利用函數(shù)求兩個(gè)一維數(shù)組對(duì)應(yīng)元素之和 8 5 3指向函數(shù)的指針 編譯器為每個(gè)函數(shù)確定一個(gè)入口地址 當(dāng)調(diào)用該函數(shù)時(shí) 系統(tǒng)會(huì)從這個(gè) 入口地址 開(kāi)始執(zhí)行函數(shù) 存放函數(shù)的入口地址的指針就是一個(gè)指向函數(shù)的指針 簡(jiǎn)稱(chēng)為函數(shù)指針 定義函數(shù)指針的格式為 注意在定義指向函數(shù)的指針變量假設(shè)為p時(shí) p 兩側(cè)的括號(hào)不可省略 表示p先與 結(jié)合 它是指針變量 然后再與后面的 結(jié)合 表示此指針變量指向函數(shù) 否則將與返回指針的函數(shù)相混淆 8 5 3指向函數(shù)的指針 例8 23指向函數(shù)的指針例8 24用指向函數(shù)的指針實(shí)現(xiàn)比較大小的運(yùn)算例8 25從任意類(lèi)型的數(shù)組中找出最大元素 8 5 4帶參數(shù)的main 函數(shù) 為執(zhí)行一個(gè)可執(zhí)行文件而在操作系統(tǒng)提示符下輸入的命令叫命令行 命令行一般語(yǔ)法形式 命令名參數(shù)1參數(shù)2 參數(shù)n帶參數(shù)的main 函數(shù)形式 main intargc char argv 形參名任意 習(xí)慣上使用argc和argv 其中argc為命令行中參數(shù)的個(gè)數(shù) 包括可執(zhí)行文件名 而argv為一字符指針數(shù)組 元素個(gè)數(shù)隨命令行參數(shù)而定 每個(gè)指針數(shù)組元素都指向命令行中的一個(gè)參數(shù) 例8 26帶參數(shù)的main 函數(shù) 8 6new和delete運(yùn)算符 8 6 1new和delete運(yùn)算符的用法8 6 2使用new和delete運(yùn)算符的注意事項(xiàng) 8 6 1new和delete運(yùn)算符的用法 1 new操作符的使用C 提供了操作符new和new 來(lái)創(chuàng)建動(dòng)態(tài)變量 1 new用來(lái)動(dòng)態(tài)創(chuàng)建單個(gè)變量 語(yǔ)法格式為 new 2 可以在申請(qǐng)內(nèi)存空間時(shí) 同時(shí)對(duì)該內(nèi)存空間初始化 3 new 用來(lái)創(chuàng)建動(dòng)態(tài)變量數(shù)組 語(yǔ)法格式為 2 delete操作符的使用 1 delete 釋放所指向的內(nèi)存空間 對(duì)應(yīng)上面的第一點(diǎn) 釋放時(shí)用語(yǔ)句 deletep 釋放p所指向的內(nèi)存空間 2 delete 或者delete 例8 27動(dòng)態(tài)實(shí)現(xiàn)內(nèi)存分配和撤銷(xiāo) 8 6 2使用new和delete運(yùn)算符的注意事項(xiàng) 兩個(gè)運(yùn)算符 應(yīng)注意以下幾點(diǎn) 1 用new運(yùn)算符分配的存儲(chǔ)空間 其初值是不確定的 2 用new運(yùn)算符分配空間后 要判斷指針的值是否為0 若為0 表示動(dòng)態(tài)分配內(nèi)存失敗 3 定義一個(gè)指針 動(dòng)態(tài)分配數(shù)組時(shí) 不能對(duì)數(shù)組進(jìn)行初始化 4 當(dāng)new運(yùn)算符計(jì)算的指針類(lèi)型與賦值運(yùn)算符左操作數(shù)類(lèi)型不一致時(shí) 必須進(jìn)行強(qiáng)制類(lèi)型裝換 5 用new運(yùn)算符分配的內(nèi)存空間 該指針不能隨意指向別的空間 否則 當(dāng)指針已不再指向用new運(yùn)算符分配的內(nèi)存空間時(shí) delete會(huì)出錯(cuò) 6 不需要時(shí)一定要及時(shí)歸還給操作系統(tǒng) 讓操作系統(tǒng)能夠分配給其他需要內(nèi)存的指針 8 7引用和其他類(lèi)型的指針 8 7 1引用類(lèi)型變量的說(shuō)明和使用8 7 2函數(shù)的引用傳遞8 7 3const類(lèi)型變量8 7 4void型指針 8 7 1引用類(lèi)型變量的說(shuō)明和使用 在C 中引入引用類(lèi)型的主要目的是為了在函數(shù)的參數(shù)傳遞時(shí)提供方便 引用類(lèi)型主要用作函數(shù)的參數(shù)或用作函數(shù)的返回值類(lèi)型 定義一個(gè)引用類(lèi)型變量的一般格式為 定義了一個(gè)引用類(lèi)型的變量aa 它是變量a的別名 例8 28利用類(lèi)型變量的使用示例 8 7 2函數(shù)的引用傳遞 1 引用作為函數(shù)的參數(shù)引用可以作為函數(shù)的參數(shù) 建立函數(shù)參數(shù)的引用傳遞方式 傳遞引用實(shí)際上傳遞的是變量的地址 這一點(diǎn)與指針是一樣的 但是這種傳遞方式避免了傳遞大量數(shù)據(jù)帶來(lái)的額外空間開(kāi)銷(xiāo) 從而節(jié)省大量存儲(chǔ)空間 減少了程序運(yùn)行的時(shí)間 2 函數(shù)的返回值為引用類(lèi)型當(dāng)函數(shù)的返回值為引用類(lèi)型時(shí) 它的返回值一定是某一個(gè)變量的別名 例8 29函數(shù)的引用傳遞例8 30函數(shù)的返回值為引用類(lèi)型 8 7 3const類(lèi)型變量 1 定義const型常量constintDeadLine 365 constfloatA 1 00009 用const定義的標(biāo)識(shí)符常量時(shí) 一定要對(duì)其初始化 2 const型指針const是一個(gè)左結(jié)合的類(lèi)型修飾符 用于指針的有以下幾種情況 1 將const放在指針變量的類(lèi)型的前面 constint A 表示指針變量A可變 指針?biāo)赶虻臄?shù)據(jù) A不可變 2 將const放在指針變量的 的后面 int constA 表示指針A不可變 但指針變量所指向的數(shù)據(jù) A可變 在定義時(shí)必須賦初值 3 將一個(gè)const放在指針變量的類(lèi)型的前面 將另一個(gè)const放在指針變量的 的后面 constint constA 表示指針變量所指向的值是一個(gè)常量 即指針A可變 指針?biāo)赶虻臄?shù)據(jù)也是一個(gè)常量 A也不可變 在定義時(shí)必須賦初值 例8 31const型指針示例之一 8 7 4void型指針 說(shuō)明void型指針的語(yǔ)法格式為 void 其中 指針變量 可指向任何類(lèi)型的數(shù)據(jù) 可將任何地址賦給指針變量 實(shí)際使用void型指針時(shí) 只有通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換才能使void型指針得到具體變量的值 在沒(méi)有轉(zhuǎn)換前 void型指針不能進(jìn)行指針的算術(shù)運(yùn)算 例8 33void型指針使用錯(cuò)誤的示例例8 34強(qiáng)制類(lèi)型轉(zhuǎn)換后使用void型指針示例 8 8簡(jiǎn)單鏈表 8 8 1鏈表概述8 8 2建立鏈表8 8 3鏈表的輸出8 8 4鏈表的插入8 8 5鏈表的刪除 8 8 1鏈表概述 鏈表是一種物理存儲(chǔ)單元上非連續(xù) 非順序的存儲(chǔ)結(jié)構(gòu) 數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的指針鏈接次序?qū)崿F(xiàn)的 鏈表由一系列結(jié)點(diǎn) 鏈表中每一個(gè)元素稱(chēng)為結(jié)點(diǎn) 組成 結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成 鏈表的結(jié)構(gòu)如圖8 11所示 圖8 11鏈表結(jié)構(gòu)示意圖 8 8 2建立鏈表 創(chuàng)建鏈表的基本步驟如下 第一步 創(chuàng)建第一個(gè)節(jié)點(diǎn) 并將此節(jié)點(diǎn)的內(nèi)存地址保存第二步 創(chuàng)建第二個(gè)節(jié)點(diǎn) 將第二個(gè)節(jié)點(diǎn)的首地址保存在第一個(gè)節(jié)點(diǎn)的成員變量中 第三步 以此類(lèi)推 創(chuàng)建第n個(gè)節(jié)點(diǎn) 并將此節(jié)點(diǎn)的地址存儲(chǔ)到第n 1節(jié)點(diǎn)的成員變量中 例8 35建立無(wú)序鏈表的函數(shù) 8 8 3鏈表的輸出 鏈表的輸出步驟如下 1 找到表頭 2 若是非空表 輸出節(jié)點(diǎn)的值成員 是空表則退出 3 跟蹤鏈表的增長(zhǎng) 即找到下一個(gè)節(jié)點(diǎn)的地址 例8 36鏈表的輸出 8 8 4鏈表的插入 在鏈表中插入節(jié)點(diǎn)的基本步驟如下 第一步 獲得第一個(gè)節(jié)點(diǎn)的地址 第二步 找到插入節(jié)點(diǎn)的位置 第三步 創(chuàng)建新的節(jié)點(diǎn)InsertNode 第四步 將當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn)信息存儲(chǔ)到新創(chuàng)建節(jié)點(diǎn)InsertNode的成員變量 第五步 將InsertNode的地址存儲(chǔ)到當(dāng)前節(jié)點(diǎn)的成員變量中 第六步 結(jié)束 例8 37鏈表的插入 8 8 5鏈表的刪除 刪除鏈表的基本步驟如下 第一步

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論