版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第七章處理復雜數(shù)據(jù)的主要內(nèi)容,案例:使用“學生信息管理系統(tǒng)”處理人數(shù)變動的指針處理,表示學生人數(shù)變動案例,實施學生練習展開的總結(jié),將多個學生的信息以數(shù)組形式累積。 c語言中數(shù)組只能定義固定長度,但實際上無法事先知道學生人數(shù),無法確定數(shù)組的大小。 所以,學生人數(shù)變化的時候,使用數(shù)組有點不方便。 因為定義過多的數(shù)組會浪費空間。定義過短無用。 在此,引入c語言中的重要概念指針。 使用指針,可以容易地實現(xiàn)學生人數(shù)的變更,根據(jù)情況申請存儲空間。 這樣就不會浪費存儲空間或產(chǎn)生不充分的問題。 本章將繼續(xù)完善“學生信息管理系統(tǒng)”的案例教學。 根據(jù)上一章的案例程序,可以實現(xiàn)存儲器空間的動態(tài)分配管理學生人數(shù)的變化
2、。 具體而言,暫時確定學生人數(shù),進行存儲器空間的動態(tài)分配,處理“學生信息管理系統(tǒng)”的人數(shù)變動,如果程序定義了變量,則在編譯時將存儲單元分配給該變量。 系統(tǒng)根據(jù)程序中定義的變量類型分配特定長度的空間。 內(nèi)存區(qū)域的每個字節(jié)都有編號。 這是地址。 酒店的房間號碼和學生宿舍的宿舍號碼一樣。 在地址上顯示的記憶體單元中儲存資料,就像旅客住在旅館的每個房間一樣。 根據(jù)存儲器編號也可以正確找到所需的存儲器單元。 因此,存儲單元的地址和存儲單元的內(nèi)容是兩個不同的概念。用指針處理人數(shù)變動指針,用指針處理人數(shù)變動指針,定義int型變量x,編譯時系統(tǒng)對變量x分配了2000到2003這4個字節(jié)。 定義浮點型變量y,在
3、編譯時將3000到3003的4字節(jié)分配給變量y。 通常只關心變量的第一個字節(jié)的編號。 變量的第一個字節(jié)號稱為該變量的地址。 2000是變量x的地址,3000是變量y的地址。 一個變量的地址稱為該變量的“指針”。 嚴格來說,指針是地址。 時,如果有指針定義,則可知道下一個變量值的讀取操作。 程序中一般用變量名對存儲單元進行存取操作。 與printf(“%d”、x )一樣,從變量名和地址的對應關系(該關系由編譯時決定)找到變量x的地址2000,從2000開始的4字節(jié)提取數(shù)據(jù)并輸出。 這種按變量地址訪問變量值的方式除了稱為“直接訪問”方式以外,還能夠采用稱為“間接訪問”的方式將變量x的地址保存在其他
4、變量中。 c語言可以定義存儲變量地址的特殊變量。 假設定義了存儲整數(shù)變量x地址的變量x_pointer。 x_pointer=時,x_pointer的值為2000,即,在下面的語句中,可以將x變量的地址2000存儲在變量x_pointer中,如果要求變量x的值,請找到存儲變量x地址的變量,然后從中獲取x地址(2000 ) 、用指針處理人數(shù)變動-如果使用指針、2000、X_pointer: (3012-3015 )、X_value、X: (2000-2003 )、x變量存儲另一變量的地址(指針),則稱為指針變量。 容納變量地址的變量也可以說是指針變量。 定義指針變量時,(1)指針類型的說明,也就
5、是定義變量是指針變量(2)指針變量名(3)指針變量所指變量的數(shù)據(jù)類型。 其常見的定義格式是基本類型*指針變量名,其中*表示指針變量,基本類型表示指針變量指向的變量的數(shù)據(jù)類型。必須指定基本類型。 一個指針變量只能指相同類型的變量,指針處理人數(shù)的變更-指針變量的定義,int *p1; 浮點* p 2; 史蒂文*蘇特; 的雙曲馀弦值。 定義指針變量后,必須像指派其他變量一樣指派值。 不能使用未分配的指針變量。 指針變量的代入只能賦予地址,絕對不能指其他數(shù)據(jù),即定義的基類型的變量。 指針變量的兩個運算符(1)短int * I _ pointer; i_pointer=如此定義的指針變量i_pointe
6、r指向變量I。 定義變量I時,假定其被分配的空間的起始地址為2000。運行i_pointer=/年int month; /月入日; /日Date; 結(jié)構圖形名稱40; 學生名char sno20; /學號char sid20; /身份證號碼Date birth; /出生年月日char address200; /本地地址Student; 指針處理人數(shù)變動結(jié)構型指針,Student stu=張三,20100605011990,10,12,廣東省廣州市天河區(qū)天河北路123號Student *stup; stup=指針變量stup可以為此指針變量賦值,使stup
7、指向結(jié)構變量stu。 指針處理人數(shù)變動-結(jié)構型指針,訪問結(jié)構變量成員的一般形式是結(jié)構變量名printf (學生基本信息: n姓名=%sn學號=%sn身份證=%sn出生年月日=% d-% dn通過指針變量訪問此結(jié)構變量的各個成員) 訪問結(jié)構變量的成員的一般格式是(*指針變量名).成員名或指針變量名-成員名printf (學生基本信息: n名=%sn學號=%sn身份證=%sn出生日期=% d ) (* stup ).SnO、(*stup).sid、(*stup).sid . birth.month printf (學生基本信息: n姓名=%sn學號=%sn身份證=%sn出生年月日=% d-% dn
8、本地地址=%sn,stup-name,stup-)、指針處理人數(shù)變動-結(jié)構型指針利用結(jié)構數(shù)組的指針變量Student stu50、*stup=、指針處理人數(shù)變更-結(jié)構型指針、#include void swap(int x,int y) int temp; 時間=x; x=y; y=暫停; 主()接口a、b; 掃描(%d,%d,指針處理人數(shù)變動-將指針作為關殘奧計量器,#包括語音交換(int * p 1,int *p2) int *p; p=p1; p1=p2; p2=p; 主()接口a、b; int *指點器_ 1、*指點器_ 2; 掃描(%d,%d,),指針處理人數(shù)變動-將指針作為關殘奧計
9、量器,#包括語音交換(int * p 1,int *p2) int p; p=*p1; *p1=*p2; *p2=p; 主()接口a、b; int *指點器_ 1、*指點器_ 2; scanf(%d,%d,指針處理人數(shù)變動-將指針作為關殘奧參數(shù),malloc函數(shù)的原型為void * malloc(unsigned int size ); 其目的是為內(nèi)存的動態(tài)存儲分配size長度的連續(xù)區(qū)域。 此函數(shù)返回指向已分配域的起始地址的指針。 如果函數(shù)執(zhí)行不成功(例如,內(nèi)存不足),則返回空指針。 以下語句申請先前定義的結(jié)構所占的空間(292字節(jié)大小)。 申請空間的起始地址也分配給結(jié)構類型的指針變量。 停止
10、*停止; stup=(Student * ) malloc (sizeof (student ) ) :其中(student * )稱為強制轉(zhuǎn)換。 由于malloc函數(shù)的上限值是指向void的指針,因此將該上限值直接指定給stup指針變量會導致編譯錯誤。 執(zhí)行此強制轉(zhuǎn)換是為了告訴編譯器知道此類型不匹配的問題,但沒有問題。 不要搞錯了。指針處理人數(shù)變動-malloc函數(shù)申請空間、Free函數(shù)的函數(shù)原型,用于釋放void free(void *p )從p指向的存儲區(qū)域,使該部分的存儲區(qū)域可供其他變量使用。 這個函數(shù)沒有門值。 如上所述申請了空間。然后,可以釋放這個空間: free(stup );
11、通過存儲空間的分配和庫函數(shù)的釋放,在案例程序“學生信息管理系統(tǒng)”中可以根據(jù)情況進行存儲空間的動態(tài)分配。 先決定保存的學生信息數(shù)量,然后才能動態(tài)分配空間。 printf (請輸入要輸入的學生總數(shù): ); scanf(%d )、指針處理人數(shù)變動-free函數(shù)釋放空間、Student stu50在Student *stu上加上#include修正insert ()函數(shù),實施情況-指針處理學生人數(shù)變動。 返回1; printf (請輸入學生名稱: ); 掃描(% s,目前名稱); printf (請輸入學生編號: ); 掃描(% s、目前狀態(tài)); printf (請輸入學生身份證號碼: ); 掃描(%
12、 s、目前狀態(tài)); printf (請輸入學生的出生年月日,格式(年-月-日) : ) scanf (% d-% d-% d,案例實施-通過用指針處理學生人數(shù)的變動,“圖書信息管理系統(tǒng)”的動態(tài)圖書數(shù)據(jù),向存儲學生信息的存儲空間的移動現(xiàn)在到了你管理圖書信息存儲空間動態(tài)分配的時候了。 持續(xù)完善你的案例程序,使圖書信息記憶空間能夠動態(tài)分配。 具體要求: (1)創(chuàng)建能夠管理圖書存儲空間動態(tài)分配的案例程序(在codeBlocks環(huán)境中調(diào)試程序,使其正常運行。 在學生練習中,首先定義簡單類型的數(shù)組和指針變量,使指針變量指向該數(shù)組。 int a6; int *p; p=a; c語言規(guī)定數(shù)組名稱表示數(shù)組的開頭
13、地址,即第一個元素的地址,是常量。 因此,以下兩個句子是等價的。 p=當前,a和p是數(shù)組中第一個元素的地址。 但是,他們有差異,a是指針常數(shù),p是指針變量。 有句子p或p-但是沒有a和a-。 現(xiàn)在,您可以使用指針引用數(shù)組元素了。 指向一維數(shù)組的指針變量,main() int a6,I; int *p; p=a; for(i=0; i6; (二) * (二)=二。 for(i=0; i6; I )打印(a % d=% dn,I,*(p i ) ),其中1、p i和a i是指a數(shù)組的第i 1個元素。 其中,*(p i )和*(a i )是p i和a i指向的數(shù)組元素,即a i、指向一維數(shù)組的指針變
14、量、main() int a6,I。 for(i=0; i6; i ) ai=i; for(i=0; i6; I )打印(a % d=% dn,I,ai ) :指向一維數(shù)組的指針變量,主() int a 6,I; for(i=0; i6; i ) *(a i)=i。 for(i=0; i6; (I )打印(a % d=% dn,I,*(a i ) ),主() int a 6,I; int *p; p=a; for(i=0; i6; (二) * (二)=二。 for(i=0; i6; (I )打印(a % d=% dn,I,*(p i ) ),定義二維數(shù)組:短int a 34; 假設陣列a的起始
15、地址是2000,則一個短整形數(shù)據(jù)在存儲空間中占2字節(jié),并且以行優(yōu)先的方式被存儲。 該陣列元素的開頭地址和值,如圖所示,擴展指向二維陣列的指針變量,(1)a是陣列名,其包含三個元素a0、a1、a2,每個元素a-I是另一個一維陣列,包含四個元素。 (2)a是二維排列的起始地址,即第0行的起始地址,a i是第I行的起始地址。 (3)ai *(a i )每一個都是第I行第0列的元素地址(4)ai j *(a i) j,并且每一個都是第I行第j列的元素地址(5)*(aij)*(*(ai ),其中,一維陣列指針變量的維數(shù)應等于二維陣列數(shù)擴展指向二維數(shù)組的指針變量。 鏈表是一種常見的重要數(shù)據(jù)結(jié)構。 這是一種動態(tài)分配存儲空間的結(jié)構。 可知在以排列存儲數(shù)據(jù)的情況下,需要預先定義固定長度(即要素數(shù))。 這使得很難掌握數(shù)組的長度,從而導致空間的浪費和不足。 節(jié)點:單向鏈表中的每個元素稱為節(jié)點,一個節(jié)點由兩部分組成。 一個數(shù)據(jù)域是用于存儲下一個節(jié)點地址的指針域,用于存儲用戶使用的實際數(shù)據(jù)。 多個節(jié)點由指針字段連接成一個鏈表。head是指稱為“頭指針”的第一個元素,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年蛋炒午餐肉食品加工機維修(加工機故障排除)試題及答案
- 2025年高職第一學年(家政服務)高端護理階段測試題及答案
- 2025年高職(應用化工技術)化工儀表試題及答案
- 2025年大學社會研究方法(調(diào)研數(shù)據(jù)處理)試題及答案
- 2025年中職機械類(機械制圖基礎)試題及答案
- 2025年中職非金屬材料(材料加工技術)試題及答案
- 2025年高職第二學年(康復治療技術)言語治療技術試題及答案
- 2025年高職電子信息工程技術(電子信息工程應用)試題及答案
- 2025年中職職業(yè)衛(wèi)生技術與管理(職業(yè)衛(wèi)生管理)期末試題
- 2025年高職(藥事管理與法規(guī))法規(guī)應用單元測試試題及答案
- 廣東省花都亞熱帶型巖溶地區(qū)地基處理與樁基礎施工技術:難題破解與方案優(yōu)化
- 生鮮乳安全生產(chǎn)培訓資料課件
- 基于知識圖譜的高校學生崗位智能匹配平臺設計研究
- GB 4053.3-2025固定式金屬梯及平臺安全要求第3部分:工業(yè)防護欄桿及平臺
- 2026年《必背60題》高校專職輔導員高頻面試題包含詳細解答
- 2026年八年級生物上冊期末考試試卷及答案
- 工程顧問協(xié)議書
- GA 1016-2012槍支(彈藥)庫室風險等級劃分與安全防范要求
- 砂漿拉伸粘結(jié)強度強度試驗記錄和報告
- 220kv輸電線路工程施工組織設計
- (完整)中考英語??嫉?00個高頻詞匯
評論
0/150
提交評論