第9章 指針 (1)_第1頁(yè)
第9章 指針 (1)_第2頁(yè)
第9章 指針 (1)_第3頁(yè)
第9章 指針 (1)_第4頁(yè)
第9章 指針 (1)_第5頁(yè)
已閱讀5頁(yè),還剩41頁(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)介

1、哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院蘇小紅蘇小紅2022-2-32/462022-2-33/46int main() int a, b; a = 5; b = 9; Swap(a, b); printf( a=%d,b=%d ,a,b); return 0;程序程序 1:簡(jiǎn)單變量作函數(shù)參數(shù):簡(jiǎn)單變量作函數(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, &b ); printf( a=%d,

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

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

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

5、何讀寫內(nèi)存中的數(shù)據(jù)?如何讀寫內(nèi)存中的數(shù)據(jù)?0000ContentsContentsContentsContentsContentsContents0 x0037b000某存儲(chǔ)區(qū)域間接尋址:通過(guò)存放變量地址的變量去訪問(wèn)變量間接尋址:通過(guò)存放變量地址的變量去訪問(wèn)變量2022-2-310/46i的值被當(dāng)做地址。如的值被當(dāng)做地址。如i=100,則輸入的整數(shù)就會(huì)從地址則輸入的整數(shù)就會(huì)從地址100開(kāi)開(kāi)始寫入內(nèi)存始寫入內(nèi)存輸入以輸入以int的二進(jìn)制形式寫到的二進(jìn)制形式寫到c所所在的內(nèi)存空間在的內(nèi)存空間c所占內(nèi)存不足以放下一個(gè)所占內(nèi)存不足以放下一個(gè)int,其后的空間也被覆蓋其后的空間也被覆蓋2022-2-31

6、1/46 指針變量指針變量 指向指向 變量變量變量的地址(指針)變量的地址(指針)變量值變量值變量地址存入變量地址存入指針變量指針變量2022-2-312/46定義了指針變量定義了指針變量pa,但,但pa并未指向并未指向a?如果指針指向一個(gè)非你控制的內(nèi)存空間如果指針指向一個(gè)非你控制的內(nèi)存空間并對(duì)該空間進(jìn)行訪問(wèn),將可能造成危險(xiǎn)并對(duì)該空間進(jìn)行訪問(wèn),將可能造成危險(xiǎn)2022-2-313/46指針變量使用之前必須初始化指針變量使用之前必須初始化Never use uninitialized pointers2022-2-314/462022-2-315/46Pointers have names, ty

7、pes and values2022-2-316/46指針變量指向的數(shù)據(jù)類型稱為基類型指針變量指向的數(shù)據(jù)類型稱為基類型指針變量只能指向同一基類型的變量指針變量只能指向同一基類型的變量2022-2-317/46不能寫成:不能寫成:int *pa, pb;2022-2-318/46 0 &a2022-2-319/46 0 &a引用指針?biāo)赶虻淖兞康闹狄弥羔標(biāo)赶虻淖兞康闹捣Q為指針的解引用稱為指針的解引用(Pointer Dereference)2022-2-320/462022-2-321/46傳變量的值傳變量的值形參值的改變形參值的改變不會(huì)影響對(duì)應(yīng)的實(shí)參不會(huì)影響對(duì)應(yīng)的實(shí)參2022-2-322/

8、46傳變量地址傳變量地址2022-2-323/46指針變量作函數(shù)參數(shù)指針變量作函數(shù)參數(shù)可以修改實(shí)參的值可以修改實(shí)參的值2022-2-324/46return僅限于僅限于從函數(shù)返回一個(gè)值從函數(shù)返回一個(gè)值2022-2-325/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; int main() int a, b; a = 5; b = 9; S

9、wap(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í) 參參形形 參參Not Work!Why?2022-2-326/46main() a, b; a = 5; b = 9; Swap(a, b); printf( a=%d,b=%d ,a,b); 0;55ab實(shí)實(shí) 參參形形 參參99xyabxy55temp9x 和和 y是內(nèi)部變量是內(nèi)部變量單向值傳遞單向值傳遞主調(diào)函數(shù)主調(diào)函數(shù)被調(diào)函數(shù)被調(diào)函數(shù)2022-2-327/46main() a, b; a = 5; b = 9; Swap( &a, &b

10、); 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-2-328/46指針指針pTemp未初始化未初始化指針指針pTemp指向哪里未知指向哪里未知對(duì)未知單元寫操作是危險(xiǎn)的對(duì)未知單元寫操作是危險(xiǎn)的永遠(yuǎn)要清楚:永遠(yuǎn)要清楚:每個(gè)指針指向了哪里每個(gè)指針指向了哪里指針指向的內(nèi)容是什么指針指向的內(nèi)容是什么 2022-2-329/46指針指針pTemp被賦了值被賦了值但交換的是地址值但交換的是地址值不是指針指向單元的內(nèi)容不是指針指向單元的內(nèi)容2022-2-330/462022-2-331/46Not Work!Why?2022-2-332/46真正的原因:普通變量作函數(shù)參數(shù)按值調(diào)用真正的原因:普通變量作函數(shù)參數(shù)按值調(diào)用不能在被調(diào)函數(shù)中改變相應(yīng)的實(shí)參值不能在被調(diào)函數(shù)中改變相應(yīng)的實(shí)參值2022-2-333/462022

溫馨提示

  • 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)論