第10章 C語(yǔ)言 指針與函數(shù)_第1頁(yè)
第10章 C語(yǔ)言 指針與函數(shù)_第2頁(yè)
第10章 C語(yǔ)言 指針與函數(shù)_第3頁(yè)
第10章 C語(yǔ)言 指針與函數(shù)_第4頁(yè)
第10章 C語(yǔ)言 指針與函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(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、第10章 指針與函數(shù)本章重點(diǎn)ll指針作為函數(shù)的參數(shù)。 指針函數(shù)的定義。10.1 指針與函數(shù)參數(shù)函數(shù)的參數(shù)可以是變量、變量地址、數(shù)組名或指針變量。實(shí)際上函數(shù)參數(shù)為變量的地址、指針、數(shù)組名都屬于地址傳遞的方式。1 變量的地址作為函數(shù)參數(shù)。例101 變量的地址作為函數(shù)參數(shù)的例子。#include<stdio.h>void f(int *p) /*由于實(shí)參為變量的地址,形參一定是指針*/printf(“%dn”,*p);void main( )int x=5;f(&x); /*變量的地址作為實(shí)參*/解析:參數(shù)傳遞的情況如圖10.1所示,由于實(shí)參為變量的地址,形參一定是指針,因?yàn)橹挥?/p>

2、指針才能指向變量的地址。變量x的地址傳給指針p,p的值為&x,即指針p指在x的地址上,指針p所指的地址上的內(nèi)容即為變量x的值。第10章 指針與函數(shù)圖10.1 變量的地址傳遞給指針 思考:下列程序中的函數(shù)fun是以變量的地址作為函數(shù)參數(shù)傳遞,請(qǐng)分析程序執(zhí)行的結(jié)果。#include<stdio.h>void fun(int *p)*p=*p>0?*p:-*p;void main( )int x;printf("input a numn");scanf("%d", &x):fun(&x); /*此函數(shù)的調(diào)用以語(yǔ)句的形式

3、出現(xiàn)*/printf("the absolute value is %d", x);2指針作為函數(shù)的參數(shù)。例102 指針變量作為函數(shù)參數(shù)的例子。#include<stdio.h>void f(int *p)printf(“%dn”,*p);void main( )int x=5,*p;p=&x;f(p);解析:參數(shù)傳遞的情況如圖10.2所示,由于實(shí)參為指針,形參也一定是指針,因?yàn)橹挥兄羔槻拍苤赶蜃兞康牡刂贰?shí)參p指向變量x的地址,傳給指針p,p的值為&x,即指針p指在x的地址上,指針p所指的地址上的內(nèi)容即為變量x的值。C語(yǔ)言程序設(shè)計(jì)圖10.2 變

4、量的地址傳遞給指針例10.3 通過(guò)調(diào)用函數(shù),函數(shù)的參數(shù)為指針,在函數(shù)中交換兩數(shù)。#include<stdio.h>void swap(int *p1,int *p2)int p;p=*p1;*p1=*p2;*p2=p;void main( )int a,b;int *p1,*p2;scanf("%d,%d",&a,&b);p1=&a;p2=&b;swap(p1,p2);printf("n%d,%dn",a,b);假定程序在執(zhí)行時(shí),從鍵盤(pán)輸入:3,5(回車(chē)),即a、b的值分別為3、5,此時(shí)調(diào)用函數(shù)swap(p1,

5、p2),在函數(shù)swap中使得指針p1、p2所指的地址上的內(nèi)容進(jìn)行交換,即a、b的值交換,如圖10.3所示。第10章 指針與函數(shù)形參pp1 p2實(shí)參p1 p2(a)執(zhí)行到函數(shù)swap中語(yǔ)句int p;時(shí)的參數(shù)傳遞情況形參p p2 p1實(shí)參 p1p2(b)執(zhí)行到函數(shù)swap中語(yǔ)句*p2=p;時(shí)的參數(shù)情況實(shí) 參 a b p1 p2(c)回到main函數(shù)時(shí),形參p、p1、p2被釋放,a、b的值已交換圖10.3 實(shí)參、形參相互關(guān)系例10.4 在main函數(shù)中讀入兩個(gè)字符串,調(diào)用自定義函數(shù)strcmp,比較兩個(gè)字符串的大小,實(shí)參用數(shù)組名,形參用指針。解析:字符串比較時(shí),返回的是第一個(gè)不同字符的差值。因而函

6、數(shù)的返回值類(lèi)型為int,函數(shù)的原型可以寫(xiě)成:int strcmp(char *p1,char *p2),程序設(shè)計(jì)如下:#include<stdio.h>void strcmp(char *s1,char *s2)for(;*s1!=0;s1+,s2+)if(*s1!=*s2) break;return(*s1-*s2);C語(yǔ)言程序設(shè)計(jì)void main( )char str190,str290;gets(str1);gets(str2);printf("%dn",strcmp(str1,str2);思考:用指針傳遞的方式,調(diào)用一個(gè)函數(shù),求一個(gè)字符串的長(zhǎng)度。 例1

7、0.5 在main函數(shù)中讀入一個(gè)由數(shù)字字符組成的字符串,把此字符串作為函數(shù)的參數(shù),調(diào)用此函數(shù),把它轉(zhuǎn)換為一個(gè)整型數(shù),返回到main函數(shù)。解析:用表達(dá)式*p-0把一個(gè)數(shù)字字符轉(zhuǎn)化為數(shù)字,如字符串“12”,計(jì)算1-0得到1,然后乘10,再加上2-0,程序的流程如圖10.4所示。圖10.4 程序流程圖程序設(shè)計(jì)如下:#include<stdio.h>int ctoi(char *p)int sum=0;while(*p)sum*=10;sum+=*p-0;p+;return sum;第10章 指針與函數(shù)void main( )char str5;int x;scanf("%s&q

8、uot;,str);x=ctoi(str); /* 數(shù)組名作為函數(shù)的參數(shù) */printf("x=%dn",x); 例10.6 設(shè)計(jì)一個(gè)程序,在main( )中輸入一個(gè)字符串,然后再輸入一個(gè)字符,調(diào)用一個(gè)函數(shù)void del_char(char *p,char x),刪除指針p所指字符串中的x這個(gè)字符。解析:函數(shù)的的流程圖如圖10.5所示。圖10.5 流程圖程序設(shè)計(jì)如下:#include<stdio.h>#define N 80void del_char(char *p,char x)char *q=p;for(;*p!=0;p+)if (*p!=x) *q+=

9、*p;*q='0'void main( )char cN,*pt=c,x;printf("enter a string:");gets(pt);C語(yǔ)言程序設(shè)計(jì)printf("enter the char deleted:");x=getchar( );del_char (pt,x);printf("The new string is :%sn",c);10.3 返回值為指針的函數(shù)函數(shù)被調(diào)用后,可以由函數(shù)中的return語(yǔ)句返回一個(gè)值到主調(diào)函數(shù)中。函數(shù)的返回值可以是整型值、字符值、實(shí)型值等,也可以是返回指針型的數(shù)據(jù),即地

10、址。返回值為指針的函數(shù),與以前的函數(shù)概念類(lèi)似,只是返回的值的類(lèi)型是指針類(lèi)型而已,此類(lèi)函數(shù)通常稱(chēng)為指針函數(shù)。指針函數(shù)定義形式:類(lèi)型名 *函數(shù)名(形參表定義)函數(shù)體如:int *func(int x,int y);其中,func是函數(shù)名,其返回值類(lèi)型是“指向整型的指針”,也即函數(shù)值是一個(gè)指針,指向一個(gè)整型變量,函數(shù)的形參為int x 和int y。例10.10 由鍵盤(pán)輸入112自然數(shù),再調(diào)用指針函數(shù)輸出英文名被調(diào)用程序中應(yīng)定義指針函數(shù)。#include<stdio.h>char *month_name(int n)static char *name13="ILLEGAL&qu

11、ot;,"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBET","NOVEMBER","DECEMBER"return(n<1 | n>12)? name0:namen);void main() char *month_name

12、(int); /*說(shuō)明一個(gè)指針函數(shù),由于函數(shù)定義在先,此語(yǔ)句可省略*/第10章 指針與函數(shù)int n;scanf("%d",&n);printf("%s",month_name(n); 例10.11 編一函數(shù),在一組字符串中找出按字典序最大的字符串。#include<stdio.h>#include<string.h>char *find_max(char *str,int n) /聲明函數(shù)返回值為指向字符的指針int i;char *p;p=str0; /假設(shè)str0及p所指向的字符串按字典序最大 for(i=1;i<n;i+)if(strcmp(stri,p)>0)p=stri; /使p指向按字典序最大的字符串return p; /返回指針值void main()char *a5="ABc","abc","Abc","abcd","abca"printf("%sn",find_max(a,5);運(yùn)行結(jié)果:abcd解析:char *find_max(char *str,int n)聲明函數(shù)返回值為一個(gè)指

溫馨提示

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