




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第8章 指針 變量的指針和指針變量 數(shù)組的指針和指向數(shù)組的指針變量 字符串指針和指向字符串的指針變量 函數(shù)的指針和指向函數(shù)的指針變量 返回指針值的函數(shù) 指針數(shù)組和指向指針的指針 main函數(shù)的命令行參數(shù) 指針 變量的指針就是它的地址。通過變量的地址能找到該變量在內(nèi)存中的存儲單元,從而得到它的值,稱為直接訪問。存放地址的變量叫做指針變量。指向某變量的指針變量存放該變量的首地址,即指向該變量的首字節(jié)。通過指針變量得到所指變量的地址,再訪問變量,稱為間接訪問。指針變量的定義 在一個指針變量中只能存放同一類型變量的地址。指針變量必須先定義,才能使用。定義指針變量的一般形式: 類型 *指針變量名例如:i
2、nt *a,*b; 指針變量的賦值 指針變量賦值語句的一般形式:指針變量名=&變量名;例如: int a,b; int *p1,*p2; p1=&a; /*將a的首地址賦給p1 */ p2=&b; 指針變量的引用 可以使用以下兩個指針相關(guān)運(yùn)算符: & 取地址運(yùn)算符 如:p=&a 將a的地址送入p * 指針運(yùn)算符(間接訪問運(yùn)算符) 如:*p就是p所指向的變量,也就是a。注意: *p與a等價的前提是p=&a;。 例如 main () int a=10,b=20; int *p1,*p2; p1=&a;p2=&b; printf(%d,
3、%dn,a,b); printf(%d,%dn,m,n); printf(%d,%dn,*m,*n); 運(yùn)行結(jié)果:10,20 -38,-36 10,20 將兩個數(shù)從大到小輸出。main () int a,b,*p1,*p2,*p; scanf(%d,%d,&a,&b); p1=&a;p2=&b; if(ab) p=p1;p1=p2;p2=p; printf(a=%d,b=%dn,a,b); printf(%d,%dn,*p1,*p2); 指針變量作函數(shù)參數(shù) 將主調(diào)函數(shù)變量的地址作為實(shí)參,傳給被調(diào)函數(shù)的指針形參。在函數(shù)調(diào)用的過程中,使形參所指向的變量值發(fā)生變化。
4、將兩個變量的內(nèi)容交換后輸出 swap(int *p1,int *p2)int t; t=*p1;*p1=*p2;*p2=t; main ( )int a,b; scanf(%d,%d,&a,&b); printf(a=%d,b=%dn,a,b); swap(&a,&b); printf(a=%d,b=%dn,a,b); 如果想通過函數(shù)調(diào)用得到n個要改變的值,可以:1在主調(diào)函數(shù)中設(shè)n個變量,用n個指針變量指向它們;2然后將指針變量作為實(shí)參,將這n個變量的地址傳給被調(diào)函數(shù)的形參;3通過指針變量,改變這n個變量的值;主調(diào)函數(shù)中就可以使用這些改變了值的變量。 數(shù)組的指針
5、和指向數(shù)組的指針變量 數(shù)組元素的指針是數(shù)組元素的地址。數(shù)組的指針是指數(shù)組的起始地址,即第一個元素的地址。數(shù)組名表示數(shù)組的起始地址。 例如:int a10,*p; p=a; 指針也可指向數(shù)組中的其它元素例如:int a10;int *p=&a5;則p是指向數(shù)組元素a5的指針,也就是說,p存放的是a5的地址。通過指針引用數(shù)組元素 1可以通過指針為數(shù)組元素賦值。例如:int a10; int *p; p=a; a0=2 與*p=2等價。 2指向數(shù)組的指針可以指向數(shù)組中的其它元素。例如:int a10,*p=a; p+;此時p指向數(shù)組a的第二個元素。即p中存放a1的地址。 3指向數(shù)組的指針變量
6、也可以帶下標(biāo)。例如:int a10,*p=a,i;可以使用ai、*pi、(a+i)或*(p+i)引用a數(shù)組中第i個元素。注意:指針移動不能超出數(shù)組元素的范圍。輸出數(shù)組中的數(shù) main ( ) int a10,i,*p; for(i=0;i10;i+) ai=i; for (p=a;pa+10;p+) printf(%4d,*p);注意注意 +和*是同優(yōu)先級,右結(jié)合。例如: *m+和*(m+)等價,(*m)+表示m所指向的元素值加1。數(shù)組名可以作為實(shí)參傳給形參。由于數(shù)組名是一個地址值,對應(yīng)的形參應(yīng)該是一個數(shù)組或一個指針變量。當(dāng)形參被定義為數(shù)組時,C系統(tǒng)按指針變量處理。 求10個數(shù)的平均值 flo
7、at average(float *array)int i; float aver,sum=0; for (i=0;i10;i+) sum=sum+arrayi; aver=sum/10; return (aver); main ( )float score10,aver;int i; for(i=0;i10;i+) scanf(%f,&scorei); aver=average(score); printf(Average score is %5.2f,aver); 二維數(shù)組的指針1. 二維數(shù)組的指針有行指針和列指針。 int a22=1,2,3,4; a是二維數(shù)組名,是二維數(shù)組的起
8、始地址。2.a0、a1是二維數(shù)組中2個一維數(shù)組的名字,是2個一維數(shù)組的起始地址。a0指向0行0列元素,a1指向1行0列元素;它們是列指針。 a是數(shù)組0行首地址,a+1是數(shù)組1行首地址,a、a+1是行指針。3. ai與*(a+i)等價,aij、*(ai+j)、*(*(a+i)+j)都是第i行第j列元素。說明4.可以定義指向一維數(shù)組的指針變量。例如:int(*p)2;例如: int a22,(*p)2; p=s; p+1表示數(shù)組a的1行首地址。例如 #include main() int a22=1,2,3,4,(*p)2=a,i,j; for(i=0;i2;i+) f o r ( j = 0 ;
9、 j 2 ; j + + ) printf(“%d,%d,%d”,aij,*(*(a+i)+j),*(*(p+i)+j) ;字符串的指針 C語言表示一個字符串可以有兩種方法:方法一:字符數(shù)組方法二:字符指針例如 main ( )char s=I am a student“,*p=s; printf(%s %sn,s,p); main ( ) int *p=I am a student; printf(%sn,p); C語言對字符串常量是按照字符數(shù)組處理的,在內(nèi)存開辟了一段空間用來存放字符串,并把字符串首地址賦給了字符指針變量p。 字符指針變量與字符數(shù)組 字符數(shù)組和字符指針的共同點(diǎn)是都可以實(shí)現(xiàn)字
10、符串的存儲和運(yùn)算。它們的區(qū)別如下:1字符數(shù)組由若干個元素組成,每個元素存放一個字符,而字符指針變量存放的是字符串的首地址。2. 在賦值語句中,不能對整個字符數(shù)組賦值,只能對各個元素賦值。而對指針變量,卻可以直接將字符串的首地址賦給指針變量。 例如:char *a=“I am student”; 等價于 char *a; a=I am student;將字符串按逆序存放后輸出 #include #include main ( )char t,ch80,*p,*q; gets(ch); puts(ch); for(p=ch,q=p+strlen(ch)-1;py?x:y; return(z);返回
11、指針值的函數(shù) 一個函數(shù)可以返回指針型的數(shù)據(jù),即地址。 #include char *fun(char *); main () char ch=a,*p=&ch,*q; q=fun(p); puts(q); char *fun(char *s) char *t=big; *(t+1)=*s; return t;運(yùn)行結(jié)果:bag 指針數(shù)組 元素均為指針的數(shù)組稱為指針數(shù)組,即數(shù)組中的每一個元素都是指針變量。指針數(shù)組的定義形式: 類型 *數(shù)組名長度;例如:int *p4;/*注意與int(*p)4區(qū)別,這是指向一維數(shù)組的指針變量。*/指針數(shù)組經(jīng)常用于處理多個字符串。 #include #inc
12、lude main ( )int i,k; char *str=China,Japan,French; for(i=1,k=0;i3;i+) if (strcmp(strk,stri)0) k=i; printf(The largest string is:%sn,strk);運(yùn)行結(jié)果:The largest string is:Japan指向指針的指針 指針變量也有地址,這個地址可以存放在另一個指針變量中。例如:char *p,*q=abc; p=&q; 則變量p是指向指針變量q的指針。 例如 main ( )char *str=China,Japan,French; char *q=str; int i; fo
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南昆明市黃岡實(shí)驗(yàn)學(xué)校2024-2025學(xué)年高二下數(shù)學(xué)期末達(dá)標(biāo)測試試題含解析
- 浙江省杭州八中2025年高二下數(shù)學(xué)期末學(xué)業(yè)水平測試模擬試題含解析
- 新疆烏魯木齊市2024-2025學(xué)年化學(xué)高二第二學(xué)期期末達(dá)標(biāo)檢測模擬試題含解析
- 新疆哈密市十五中2025年高二化學(xué)第二學(xué)期期末質(zhì)量跟蹤監(jiān)視試題含解析
- 云南省賓川縣第四高級中學(xué)2025屆高二下物理期末統(tǒng)考模擬試題含解析
- 浙江省溫州樹人中學(xué)2025年高二化學(xué)第二學(xué)期期末達(dá)標(biāo)測試試題含解析
- 旅游產(chǎn)業(yè)借款合同模板:含旅游服務(wù)收入擔(dān)保條款
- 車輛抵押權(quán)質(zhì)押合同范本
- 城市道路兩側(cè)廣告牌拆除與交通組織優(yōu)化合同
- 生態(tài)環(huán)保草坪圍欄設(shè)計(jì)與施工合同
- 2025屆河南省青桐鳴5月全真模擬卷·高考考前適應(yīng)性考試-生物試題(含答案)
- 辦公軟件MS Office應(yīng)用試題及答案
- 夜場水煙合作協(xié)議書
- 2025年“鑄牢中華民族共同體意識”知識競賽題庫及答案
- 河南省青桐鳴大聯(lián)考普通高中2024-2025學(xué)年高三考前適應(yīng)性考試地理試題及答案
- 管道勞務(wù)分包協(xié)議書
- 2024年湖南出版中南傳媒招聘筆試真題
- 2025-2030中國鋰電子電池行業(yè)市場深度調(diào)研及前景趨勢與投資研究報(bào)告
- 合肥市2025屆高三年級5月教學(xué)質(zhì)量檢測(合肥三模)生物試題+答案
- 7 什么比獵豹的速度更快 第二課時 課件
- 江蘇省南京市建鄴區(qū)2023-2024學(xué)年八年級下學(xué)期期末考試物理試題【含答案解析】
評論
0/150
提交評論