




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第7章 指 針C語言大學(xué)實(shí)用教程第1頁,共22頁。內(nèi)容提要指針的概念數(shù)組的下標(biāo)法引用和指針法引用利用指針數(shù)組對(duì)各個(gè)字符串進(jìn)行排序,存取等操作帶參數(shù)的main()函數(shù)第2頁,共22頁。指針概述指針的概念一、什么是變量的地址,什么是變量的內(nèi)容?每個(gè)變量在內(nèi)存中都占有一定字節(jié)數(shù)目的存儲(chǔ)單元,C編譯程序在對(duì)程序編譯時(shí),根據(jù)程序中定義的變量的類型,在內(nèi)存中為其分配相應(yīng)字節(jié)數(shù)目的存儲(chǔ)空間。變量在內(nèi)存中所占存儲(chǔ)空間的首地址,就稱為該變量的地址(address).變量在內(nèi)存中所占存儲(chǔ)單元中存放的數(shù)據(jù),就稱為變量的內(nèi)容(content)。第3頁,共22頁。直接尋址 間接尋址指針變量 專門存放地址型數(shù)據(jù)的變量運(yùn)算
2、符&和*的使用&(*p1) /*該表達(dá)式的值代表的是變量a 的地址*/ *(&a) /*該表達(dá)式引用的是變量a的內(nèi) 容*/第4頁,共22頁。引入指針的原因 為函數(shù)提供修改變量值的手段 指針為C的動(dòng)態(tài)內(nèi)存分配系統(tǒng)提供支持 指針為動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)提供支持 指針可以改善某些子程序的效率例:任意從鍵盤輸入兩個(gè)整數(shù),然后將交換后的數(shù)據(jù)重新輸出。 第5頁,共22頁。#includevoid swap(int x, int y);main() int a,b; printf(“Please enter a,b:”); scanf(“%d,%d”,&a,&b); printf(“Before swap: a=%d
3、,b=%dn”,a,b); swap(a,b); printf(“After swap: a=%d,b=%dn”,a,b); void swap(int x,int y) int temp; temp=x;x=y;y=temp;仔細(xì)分析,是否成功交換?第6頁,共22頁。變量的指針作為函數(shù)參數(shù)變量指針 指針變量 變量的指針就是變量的地址, 指針變量就是C語言中專門用于存放地址型數(shù)據(jù)的變量指針變量的定義 類型關(guān)鍵字 *指針變量名; 例: 1) int *p1,*p2; 2) int a,b; int *p1=&a,*p2=&b;第7頁,共22頁。指針變量的運(yùn)算1)指針變量的內(nèi)容只能是地址,而不能是
4、數(shù)據(jù),必須用相同基類型的變量的地址對(duì)其進(jìn)行賦值;2)指針變量必須經(jīng)初始化后才能使用,否則指針變量所指向的存儲(chǔ)單元是不確定的,對(duì)其所作的賦值等操作將是很危險(xiǎn)的。3)由于指針的值就是地址,指針運(yùn)算實(shí)質(zhì)上就是對(duì)地址的運(yùn)算。 指針運(yùn)算只能參與賦值運(yùn)算、算術(shù)運(yùn)算和關(guān)系運(yùn)算。其中,指針可參與的算術(shù)運(yùn)算值有兩種:加和減,即加、減一個(gè)整數(shù)或自增、自減運(yùn)算。第8頁,共22頁。 分析: a = *p+; a = *p; p = p+1; a = (*p)+; a = *p; *p = *p+1;第9頁,共22頁。重新解決問題#includevoid swap(int * x, int * y);main() in
5、t a,b; printf(“Please enter a,b:”); scanf(“%d,%d”,&a,&b); printf(“Before swap: a=%d,b=%dn”,a,b); swap(&a,&b); printf(“After swap: a=%d,b=%dn”,a,b); void swap(int *x,int *y) int temp; temp=*x;*x=*y;*y=temp;第10頁,共22頁。字符指針作函數(shù)參數(shù) 字符數(shù)組與字符指針的不同1)定義方法不同;char str10 ;定義的是一個(gè)字符數(shù)組,而 char *ptr;定義的是一個(gè)字符指針。2)初始化含義不
6、同;char str10 =“China”;char *ptr=”China”;第11頁,共22頁。3)賦值方法和含義不同;指針變量可以用如下方式賦值:char *ptr;ptr=”China”; /*正確*/char str10 ;str=”China”; /*錯(cuò)誤*/strcpy(str,”China”);第12頁,共22頁。4)輸入字符串時(shí)略有不同。用scanf語句輸入字符串到數(shù)組中,用char str10;scanf(“%s”,str);而用字符指針輸入字符串時(shí),必須確保字符指針事先已指向了一個(gè)數(shù)組的首地址,即char str10,*ptr;ptr=str;scanf(“%s”,ptr
7、); /*正確*/而char*ptr;scanf(“%s”,ptr); /*錯(cuò)誤*/第13頁,共22頁。5)字符數(shù)組的數(shù)組名是一個(gè)地址常量,它的值是不能改變的,而字符指針是一個(gè)變量,它的值是可以改變的。 for(ptr=str;*ptr!=0;ptr+) printf(“%c”,*ptr); 第14頁,共22頁。指針和數(shù)組間的關(guān)系 一維數(shù)組的地址和指針數(shù)組的指針:指數(shù)組的起始地址。指向數(shù)組的指針變量: int a9; int p; p=&a0; (或 p=a;)通過指針引用數(shù)組元素main() int a10,*p;for(p=a;pa+10;p+) scanf(“%d”,p);for(p=a
8、;pa+10;p+) printf(“%d”,*p); 可有五種引用數(shù)組元素的方法第15頁,共22頁。 二維數(shù)組的地址和指針行地址和列地址1)aij2)*( ai+j)3)*(*(a+i)+j)4)(*(a+i)j行指針和列指針定義行指針: 類型 (*行指針名) 常量 n定義列指針: int *p; (例題)第16頁,共22頁。指針數(shù)組指針數(shù)組:類型名 *數(shù)組名數(shù)組長度如:int *p4;第17頁,共22頁。例題:編程將若干字符串按字母順序由小到大排序后輸出。#include #includemain() int i,j; char *temp; char ptr5=“Pascal”,”Bas
9、ic”,”Fortran”,”Java”, ”Visual C”; printf(“Before sorted:n”); for(i=0;i5;i+) puts(ptri); /*輸出排序前 的5個(gè)字符串*/ 第18頁,共22頁。for(i=0;i4;i+) /*交換法排序*/ for(j=i+1;j5;j+) if(strcmp(ptrj,ptri)0) /*若字符串小于ptri所指字符串*/ temp=ptri; /*則交換指針變量 ptrj和ptri的指向*/ ptri=ptrj; ptrj=temp; printf(“After sorted:n”);for(i=0;i1) printf(“The other arguments is following:n”); for(i=1;iargc;i+) printf(“%sn”,argvi); 第21頁,共22頁。運(yùn)行程序假定上面程序的文件名是echo.c,則在程序成功編譯和連接后(編譯連接后的程序名為echo.exe),我們可按如下命令行方式運(yùn)行這個(gè)程序:echo programm
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度勞動(dòng)合同培訓(xùn)及職業(yè)發(fā)展補(bǔ)充協(xié)議
- 二零二五年度個(gè)人出租房屋轉(zhuǎn)租管理協(xié)議書
- 二零二五年度養(yǎng)老服務(wù)業(yè)合同主體轉(zhuǎn)讓方合作協(xié)議
- 二零二五年度健身房租賃經(jīng)營協(xié)議
- 2025至2030年中國粉腸香料數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國純丙外墻漆數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 二零二五年度汽車維修與購車合同
- 二零二五年度民族歌舞表演安全免責(zé)協(xié)議
- 二零二五年度生物科技正規(guī)聘用合同
- 二零二五年度全新出售房屋買賣稅費(fèi)承擔(dān)協(xié)議
- 髖關(guān)節(jié)滑膜炎護(hù)理課件
- 華為公司員工培訓(xùn)與績效管理
- 混凝土攪拌站有限空間作業(yè)管理制度模版
- 胃息肉患者的護(hù)理查房
- 2023年鋼結(jié)構(gòu)深化設(shè)計(jì)年度總結(jié)及年后展望
- 成人住院患者跌倒評(píng)估與預(yù)防(團(tuán)體標(biāo)準(zhǔn))解讀
- 石膏固定的護(hù)理教學(xué)查房
- 預(yù)制井筒施工方案
- EPC工程竣工驗(yàn)收和移交管理要點(diǎn)
- 深基坑巡視記錄
- 孫燕姿所有歌曲歌詞大全(11張專輯)
評(píng)論
0/150
提交評(píng)論