大一上-c語言程序設計基礎_第1頁
大一上-c語言程序設計基礎_第2頁
大一上-c語言程序設計基礎_第3頁
大一上-c語言程序設計基礎_第4頁
大一上-c語言程序設計基礎_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第13章指針與數(shù)組何光宇2011補充知識點:字符串連接符\\——放在行末,將多行字符串連接成一個目錄——指針與數(shù)組指針算術運算指針用于數(shù)組處理用數(shù)組名作為指針指針和多維數(shù)組應用復習:p指向cp指向cp是指針變量p中存儲了c的地址pca程序內存分配含義p可以指向a[1]嗎?a[1]p指向a[1]pca程序內存分配a[1]可指向a[5]嗎?p指向a[5]數(shù)組中元素數(shù)目可能非常多。指向數(shù)組的任一元素都要依靠取地址來實現(xiàn)嗎?也可通過指針前后移動來實現(xiàn)指針往后移動:指針與整數(shù)相加例:p+1,指針往后挪動一個元素(表明:指針指向數(shù)組下一元素)指針往前移動指針與整數(shù)相減例:p-1,指針往前挪動一個單位(表明:指針指向數(shù)組上一元素)例1:p指向a[5]通過取地址實現(xiàn)通過前后移動實現(xiàn)指向a[1]再后移4個元素指針前后移動:指針算術運算指針后移:與整數(shù)相加p+n;p+n指向?指針前移:與整數(shù)相減p-n;p-n指向?指針可以做乘法和除法嗎?不可以。做乘法和除法沒有明確的物理含義。指針還可以做哪些算術運算呢?指針相減:指針算術運算指針相減:p2–p1求p2與p1之間相隔了多少個元素如果p2在p1后面,p2–p1值是正還是負?值為正例2:p2-p1值是?小結——算術運算三種形式與整數(shù)相加p+n指針后移n個元素與整數(shù)相減(指針前移)p-n指針后移n個元素指針相減(指針間距離)p2-p1指針間相隔多少個元素1針對數(shù)組2單位為元素個數(shù)例3:程序輸出結果是?例4程序輸出是?這樣寫可以嗎?p++;p--;p+=n;p-=n;p=p+1;p=p–1;p=p+n;p=p-n;除算術運算外,還可通過比較運算判斷前后關系>,>=p2>p1

若成立,表明p2指向元素的地址位于p1指向元素后面<,<===,!=判斷兩個指針是否指向同一位置例5:什么含義?是否有錯?錯誤:若文件未打開,指針為空,也會調用fclose函數(shù)正確寫法異常情況與正常情況混在一起,可讀性不好建議寫法例6:思考若指針指向的是變量,而不是數(shù)組元素,可以對其進行前后移動的操作嗎?語法上可以但運行時會導致未可知的結果目錄——指針與數(shù)組指針算術運算指針用于數(shù)組處理用數(shù)組名作為指針指針和多維數(shù)組應用例1:程序輸出是?p?

指向a的首元素p+i?*(p+i)?

程序輸出是?由于可通過指針移動指向數(shù)組任意元素,因此,也可通過指針對數(shù)組元素進行處理例2:程序輸出是?*p++相當于:*(p++)即:*pp++與(*p)++區(qū)別即:*p(*p)++運算符結合次序:自右向左例3:程序對錯辨析1程序是否有錯?2如果沒錯,程序運行結果?目錄——指針與數(shù)組指針算術運算指針用于數(shù)組處理用數(shù)組名作為指針指針和多維數(shù)組應用數(shù)組名是數(shù)組首元素地址數(shù)組名可以看作是指針數(shù)組名與常用指針區(qū)別(1)數(shù)組名是常量不可以給a2賦值,以上程序將不能通過編譯。數(shù)組名與常用指針區(qū)別(2)sizeof結果不一樣sizeof(a),求得的是為數(shù)組a分配的存儲空間sizeof(p),求得的是為變量p分配的存儲空間目錄——指針與數(shù)組指針算術運算指針用于數(shù)組處理用數(shù)組名作為指針指針和多維數(shù)組應用注意:

aa[i]代表了什么?詳解:理解aa[i]aa[i],實質:

長為4的數(shù)組有4個元素每個元素都是整數(shù)aa[i]為這個數(shù)組首元素的地址&aa[i][0]aa?詳解:理解&p0p0是指針變量指向整數(shù)aa[0][0]&p0是指針變量的地址若將&p0記錄在變量pp中,則:需通過兩次間接尋址才能找到原始變量aa[0][0]

先找到pp

通過pp找到p0通過p0找到aa[0][0]詳解:理解int**pppp是一個指向指針變量的指針通過兩次間接訪問才能找到原始變量aa[0][0]稱pp為二維指針用兩個星號作為標記兩個星號,表明二維指針表明需要進行二次間接尋址詳解:理解intaa[3][4]aa是一個長為3的數(shù)組aa有三個元素每個元素又都是一個數(shù)組aa[0],aa[1],aa[2]aa[0]:指針詳解:理解int(*pp)[4]

根據結合律,pp是一個指針這個指針指向什么呢?將*pp用變量a代替,得到?inta[4]pp指向一個長為4的整數(shù)數(shù)組aa正是長為3的數(shù)組的首元素的地址。首元素是長為4的整數(shù)數(shù)組

可以將aa賦給pp詳解:理解int*pp[3]根據結合律(次序:從右到左),pp是一個數(shù)組pp的長度為3pp[i]:存儲整數(shù)變量的地址aa[i],代表整數(shù)變量aa[i][0]的地址可將aa[i]賦給pp[i]總結名稱例子含義二維數(shù)組intaa[3][4]

一個數(shù)組,其每一個元素又是一個數(shù)組二維指針int**pp

一個指針,指向另一個整型指針數(shù)組指針int(*p)[4]一個指針,指向長為4的數(shù)組指針數(shù)組int*p[3]

一個數(shù)組,其每一個元素又都是一個整型指針例1:理解intaaa[3][4][5]aaa長為3的數(shù)組每個元素都是一個數(shù)組(二維)aaa[i]長為4的數(shù)組每個元素都是一個數(shù)組(一維)aaa[i][j]長為5的數(shù)組每個元素都是一個整數(shù)目錄——指針與數(shù)組指針算術運算指針用于數(shù)組處理用數(shù)組名作為指針指針和多維數(shù)組應用數(shù)組作為函數(shù)參數(shù)經常需要將數(shù)組作為函數(shù)參數(shù)例:求整個數(shù)組中最大元素對數(shù)組進行排序例1:求整個數(shù)組最大元素詳解1:數(shù)組名作為參數(shù)a是指針,因此對應參數(shù)p也定義為指針不建議寫成:int

findMax(intp[],intlen)這樣定義的p依然是指針詳解2:指針的算術運算p是指針,p[k]即相當于*(p+k)詳解3:數(shù)組長度的處理數(shù)組長度可以不傳過來嗎?這樣呢?也不可以p是指針,不是數(shù)組。因而sizeof(p)的值為4.有變通方法嗎?有可以在數(shù)組中加入特殊元素從數(shù)組首元素,依次往后進行處理當碰到特殊元素時,即表明數(shù)組元素全部處理完畢對字符數(shù)組,為不將數(shù)組長度作為參數(shù),一般使用

‘\0’作為特殊元素以‘\0’結束的字符數(shù)組,稱為字符串例2:快速排序算法對長為n的字符數(shù)組a,用如下算法進行排序:1將a[0]插入數(shù)組中適當位置k,使得:其ASCII代碼值大于所有排在其前的字符,而小于所有排在其后的字符2遞歸對子數(shù)組a[0]~a[k-1]進行排序3遞歸對子數(shù)組a[k-1]~a[n-1]進行排序子任務:將a[0]插入數(shù)組中適當位置k

任務:將數(shù)組首字符排到數(shù)組中適當位置,使得其ASCII代碼值大于所有排在其前的字符,而小于所有排在其后的字符算法?算法交換找到比a[0]大的數(shù)初始狀態(tài)找到比a[0]小的數(shù)交換重復以上過程即可技能:好程序是如何寫出來的遵循測試驅動的開發(fā)方法先寫測試,再寫程序不斷改進程序,使測試通過示例V-0.1V-0.2小結1——算術運算與邏輯運算與整數(shù)相加p+n指針后移n個元素與整數(shù)相減(指針前移)p-n指針后移n個元素指針相減(指針間距離)p2-p1指針間相隔多少個元素1針對數(shù)組2單位為元素個數(shù)比較地址前后可用:<,<=,>,>=,==,!=小結2:多維數(shù)組與多維指針名稱例子含義二維數(shù)組intaa[3][4]

一個數(shù)組,其每一個元素又是一個數(shù)組二維指針int**pp

一個指針,指向另一個整型指針數(shù)組指針int(*p)[4]一個指針,指向長為4的數(shù)組指針數(shù)組

溫馨提示

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

評論

0/150

提交評論