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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

程序輸出是?由于可通過指針移動(dòng)指向數(shù)組任意元素,因此,也可通過指針對(duì)數(shù)組元素進(jìn)行處理例2:程序輸出是?*p++相當(dāng)于:*(p++)即:*pp++與(*p)++區(qū)別即:*p(*p)++運(yùn)算符結(jié)合次序:自右向左例3:程序?qū)﹀e(cuò)辨析1程序是否有錯(cuò)?2如果沒錯(cuò),程序運(yùn)行結(jié)果?目錄——指針與數(shù)組指針?biāo)阈g(shù)運(yùn)算指針用于數(shù)組處理用數(shù)組名作為指針指針和多維數(shù)組應(yīng)用數(shù)組名是數(shù)組首元素地址數(shù)組名可以看作是指針數(shù)組名與常用指針區(qū)別(1)數(shù)組名是常量不可以給a2賦值,以上程序?qū)⒉荒芡ㄟ^編譯。數(shù)組名與常用指針區(qū)別(2)sizeof結(jié)果不一樣sizeof(a),求得的是為數(shù)組a分配的存儲(chǔ)空間sizeof(p),求得的是為變量p分配的存儲(chǔ)空間目錄——指針與數(shù)組指針?biāo)阈g(shù)運(yùn)算指針用于數(shù)組處理用數(shù)組名作為指針指針和多維數(shù)組應(yīng)用注意:

aa[i]代表了什么?詳解:理解aa[i]aa[i],實(shí)質(zhì):

長(zhǎng)為4的數(shù)組有4個(gè)元素每個(gè)元素都是整數(shù)aa[i]為這個(gè)數(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是一個(gè)指向指針變量的指針通過兩次間接訪問才能找到原始變量aa[0][0]稱pp為二維指針用兩個(gè)星號(hào)作為標(biāo)記兩個(gè)星號(hào),表明二維指針表明需要進(jìn)行二次間接尋址詳解:理解intaa[3][4]aa是一個(gè)長(zhǎng)為3的數(shù)組aa有三個(gè)元素每個(gè)元素又都是一個(gè)數(shù)組aa[0],aa[1],aa[2]aa[0]:指針詳解:理解int(*pp)[4]

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

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

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

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

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論