C程序語言課件:第9章 指針_第1頁
C程序語言課件:第9章 指針_第2頁
C程序語言課件:第9章 指針_第3頁
C程序語言課件:第9章 指針_第4頁
C程序語言課件:第9章 指針_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2022-4-182/462022-4-183/46void Swap(int x,int y) int temp; temp = x; x = y; y = temp;int main() int a, b; a = 5; b = 9; Swap(a, b); printf( a=%d,b=%d ,a,b); return 0;程序程序 1:簡單變量作函數(shù)參數(shù):簡單變量作函數(shù)參數(shù)void Swap(int *x,int *y) int temp; temp = *x; *x = *y; *y = temp;int main() int a, b; a = 5; b = 9; Swap( &a

2、mp;a, &b ); printf( a=%d,b=%d ,a,b); return 0;程序程序 2:指針變量作函數(shù)參數(shù):指針變量作函數(shù)參數(shù) 指針指針為函數(shù)為函數(shù)提供修改變提供修改變量值的手段量值的手段 2022-4-184/46變量的地址變量的地址變量名變量名內(nèi)存:計(jì)算機(jī)內(nèi)的存儲部件內(nèi)存:計(jì)算機(jī)內(nèi)的存儲部件所有指令和數(shù)據(jù)都保存在內(nèi)存里所有指令和數(shù)據(jù)都保存在內(nèi)存里速度快,可隨機(jī)訪問,但掉電即失速度快,可隨機(jī)訪問,但掉電即失編譯或函數(shù)調(diào)用時(shí)為變量分配內(nèi)存單元編譯或函數(shù)調(diào)用時(shí)為變量分配內(nèi)存單元0000ContentsContentsContentsContentsContentsCon

3、tentsContents變量的值變量的值某存儲區(qū)域2022-4-185/46變量的地址變量的地址內(nèi)存中的每個(gè)字節(jié)都有唯一的編號(地址)內(nèi)存中的每個(gè)字節(jié)都有唯一的編號(地址)地址是一個(gè)十六進(jìn)制無符號整數(shù)地址是一個(gè)十六進(jìn)制無符號整數(shù)其字長一般與主機(jī)相同其字長一般與主機(jī)相同地址按字節(jié)編號,按類型分配空間地址按字節(jié)編號,按類型分配空間0000ContentsContentsContentsContentsContentsContentsContents某存儲區(qū)域Address Operator2022-4-186/46如何讀寫內(nèi)存中的數(shù)據(jù)?如何讀寫內(nèi)存中的數(shù)據(jù)?0000ContentsContent

4、sContentsContentsContentsContentsContents某存儲區(qū)域只要指明要訪問的變量的內(nèi)存單元地址只要指明要訪問的變量的內(nèi)存單元地址就可以立即訪問到變量所在的存儲單元就可以立即訪問到變量所在的存儲單元scanf(%d, &a);2022-4-187/46表示輸出變量表示輸出變量a的地址值?的地址值?2022-4-188/46如何讀寫內(nèi)存中的數(shù)據(jù)?如何讀寫內(nèi)存中的數(shù)據(jù)?0000ContentsContentsContentsContentsContentsContentsContents某存儲區(qū)域直接尋址:按變量地址存取變量值直接尋址:按變量地址存取變量值sc

5、anf(%d, &a);2022-4-189/46如何讀寫內(nèi)存中的數(shù)據(jù)?如何讀寫內(nèi)存中的數(shù)據(jù)?0000ContentsContentsContentsContentsContentsContents0 x0037b000某存儲區(qū)域間接尋址:通過存放變量地址的變量去訪問變量間接尋址:通過存放變量地址的變量去訪問變量2022-4-1810/46i的值被當(dāng)作地址。如的值被當(dāng)作地址。如i=100,則輸入的整數(shù)就會從地址則輸入的整數(shù)就會從地址100開開始寫入內(nèi)存始寫入內(nèi)存輸入以輸入以int的二進(jìn)制形式寫到的二進(jìn)制形式寫到c所所在的內(nèi)存空間。在的內(nèi)存空間。c所占內(nèi)存不足以放下一個(gè)所占內(nèi)存不足以放下

6、一個(gè)int,其后的空間也被覆蓋其后的空間也被覆蓋2022-4-1811/46 指針變量指針變量 指向指向 變量變量變量的地址(指針)變量的地址(指針)變量值變量值變量地址存入變量地址存入指針變量指針變量2022-4-1812/46定義了指針變量定義了指針變量pa,但,但pa并未指向并未指向a?如果指針指向一個(gè)非你控制的內(nèi)存空間如果指針指向一個(gè)非你控制的內(nèi)存空間并對該空間進(jìn)行訪問,將可能造成危險(xiǎn)并對該空間進(jìn)行訪問,將可能造成危險(xiǎn)2022-4-1813/46指針變量使用之前必須初始化指針變量使用之前必須初始化Never use uninitialized pointers2022-4-1814/4

7、62022-4-1815/46Pointers have names, types and values2022-4-1816/46指針變量指向的數(shù)據(jù)類型稱為基類型指針變量指向的數(shù)據(jù)類型稱為基類型指針變量只能指向同一基類型的變量指針變量只能指向同一基類型的變量2022-4-1817/46不能寫成:不能寫成:int *pa, pb;2022-4-1818/46 0 &a2022-4-1819/46 0 &a引用指針?biāo)赶虻淖兞康闹狄弥羔標(biāo)赶虻淖兞康闹捣Q為指針的解引用稱為指針的解引用(Pointer Dereference)2022-4-1820/462022-4-1821/4

8、6傳變量的值傳變量的值形參值的改變形參值的改變不會影響對應(yīng)的實(shí)參不會影響對應(yīng)的實(shí)參2022-4-1822/46傳變量地址傳變量地址2022-4-1823/46指針變量作函數(shù)參數(shù)指針變量作函數(shù)參數(shù)可以修改實(shí)參的值可以修改實(shí)參的值2022-4-1824/46return僅限于僅限于從函數(shù)返回一個(gè)值從函數(shù)返回一個(gè)值2022-4-1825/46void Swap(int *x,int *y) int temp; temp = *x; *x = *y; *y = temp;int main() int a, b; a = 5; b = 9; Swap( &a, &b ); printf(

9、 a=%d,b=%d ,a,b); return 0; void Swap(int x,int y) int temp; temp = x; x = y; y = temp;int main() int a, b; a = 5; b = 9; Swap(a, b); printf( a=%d,b=%d ,a,b); return 0;程序程序 1程序程序 2 主調(diào)函數(shù)主調(diào)函數(shù)被調(diào)被調(diào)函數(shù)函數(shù)實(shí)實(shí) 參參形形 參參2022-4-1826/46main() a, b; a = 5; b = 9; Swap(a, b); printf( a=%d,b=%d ,a,b); 0;55ab實(shí)實(shí) 參參形形 參

10、參99xyabxy55temp9x 和和 y是內(nèi)部變量是內(nèi)部變量單向值傳遞單向值傳遞主調(diào)函數(shù)主調(diào)函數(shù)被調(diào)函數(shù)被調(diào)函數(shù)2022-4-1827/46main() a, b; a = 5; b = 9; Swap( &a, &b ); printf( a=%d,b=%d ,a,b); 0;&a&a實(shí)實(shí) 參參形形 參參&b&bxyabxy5temp5ab995*x*y交換的是交換的是x 和和 y指向的單元內(nèi)容指向的單元內(nèi)容主調(diào)函數(shù)主調(diào)函數(shù)被調(diào)函數(shù)被調(diào)函數(shù)2022-4-1828/46指針指針pTemp未初始化未初始化指針指針pTemp指向哪里未知指向哪里未

11、知對未知單元寫操作是危險(xiǎn)的對未知單元寫操作是危險(xiǎn)的永遠(yuǎn)要清楚:永遠(yuǎn)要清楚:每個(gè)指針指向了哪里每個(gè)指針指向了哪里指針指向的內(nèi)容是什么指針指向的內(nèi)容是什么 2022-4-1829/46指針指針pTemp被賦了值被賦了值但交換的是地址值但交換的是地址值不是指針指向單元的內(nèi)容不是指針指向單元的內(nèi)容2022-4-1830/46【例【例9.79.7】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號2022-4-1831/46【例【例9.79.7】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號2022-4-1832/46【例【例9.79.7】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號真正的原因:普通變量作函數(shù)參數(shù)按值調(diào)用真正的原因:

溫馨提示

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

最新文檔

評論

0/150

提交評論