C語言第13講指針與字符串(字符數(shù)組).ppt_第1頁(yè)
C語言第13講指針與字符串(字符數(shù)組).ppt_第2頁(yè)
C語言第13講指針與字符串(字符數(shù)組).ppt_第3頁(yè)
C語言第13講指針與字符串(字符數(shù)組).ppt_第4頁(yè)
C語言第13講指針與字符串(字符數(shù)組).ppt_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、6.2.3 指針與字符串(字符數(shù)組), C語言用字符數(shù)組存放字符串。 字符數(shù)組:元素個(gè)數(shù)確定,一般用下標(biāo)控制循環(huán)。 字符串:有效字符個(gè)數(shù)由0確定,用結(jié)束符0控制循環(huán)。, 字符數(shù)組名和字符串的值都是地址(字符串的首地址 ),1、字符串的訪問方法: 直接引用字符串:,char *chp,ch =”abcde”; /*定義字符指針和字符數(shù)組*/ chp=ch; /*指針指向字符數(shù)組*/ putchar( *(chp+2); /*通過指針引用數(shù)組元素*/ printf(“%s,%s”,ch+1,chp+2);, 引用字符數(shù)組:,char *chp; /*說明字符指針*/ chp=“Hello!”; /

2、*指針指向字符串*/ puts(chp); /*通過指針引用字符串*/,字符指針可直接指向字符串:char *chp=“Hello!”;,輸出 ?,無名一維字符數(shù)組 0,例1:輸出字符串,#include void main() char s =“computer”, *ps=s ; while(*ps!=0) putchar(*ps); ps+; ,main( ) char str80, *p, ch; int i=0; p=str; gets(p); ch=getchar(); for( ; *p!=0;p+) if(*p!=ch) stri+=*p; stri=0; printf(“Th

3、e new string is:%sn”,str); ,例2:在輸入的字符串中刪除指定的字符,2000H,p,0,ch,0,i,運(yùn)行程序: abcdef c, ,2000H,str,c,str,printf(“%s”,ps); 或: puts(ps),The new string is: abdef,字符指針(變量)與字符數(shù)組的區(qū)別,字符指針與字符數(shù)組:兩者均可存儲(chǔ)和運(yùn)算字符串。 主要區(qū)別: 存儲(chǔ)格式不同: 字符指針變量中存放的是字符串的首地址(2字節(jié));而字符數(shù)組中存放的是整個(gè)字符串(一個(gè)數(shù)組元素存放一個(gè)字符)。 性質(zhì)不同:字符數(shù)組名是地址常量,不能改變(指向首字符); 字符指針是地址變量,

4、可以改變(指向不同的字符)。 賦值方式不同:,字符指針,char *ps=“Hello”;,char *ps; ps=“Hello”;,字符數(shù)組,char st =“Hello”;,char st80; st=“Hello” 或:st =“Hello”,用循環(huán)逐個(gè)賦值或用strcpy()函數(shù)賦值,例: 統(tǒng)計(jì)字符串中的各元音字母的個(gè)數(shù)(P182 例6.15),#include void main(void) char str80,*p; int a=0,e=0,i=0,o=0,u=0; gets(str); for(p=str;*p!=0;p+) switch(*p) case a: case

5、A: a+; break; case e: case E: e+; break; case i: case I: i+; break; case o: case O: o+; break; case u: case U: u+; printf(a:%3dne:%3dni:%3dno:%3dnu:%3dn,a,e,i,o,u); ,循環(huán)遍歷數(shù)組元素,判斷字母。,判斷字符串是否結(jié)束,2. 字符串指針做函數(shù)參數(shù)(見P183 表6-2),#include void cpystr(char *s1, char *s2) while(*s2!=0 ) *s1+=*s2+; *s1=0; void main

6、 (void ) char str120,str2 =123456abcdef; printf(str2: %sn,str2); printf(str1: %sn,str1); cpystr(str1,str2); printf(str2: %sn,str2); printf(str1: %sn,str1); ,去掉該句,對(duì)程序結(jié)果是否有影響?,例: 編寫函數(shù),用指針進(jìn)行字符串的復(fù)制,6.2.4 指針數(shù)組,指針是存放其它數(shù)據(jù)對(duì)象地址的變量。也可以構(gòu)成數(shù)組。每個(gè)數(shù)組元素均為一個(gè)指針變量,且在內(nèi)存中連續(xù)存放。,1. 指針數(shù)組定義,格式: type *數(shù)組名元素個(gè)數(shù);,int *p 4 ;,定義(說

7、明)p是含有4個(gè)元素的指針數(shù)組,每個(gè)元素都是 一個(gè)指向整型變量的指針(二級(jí)指針) 。,數(shù)組名p為數(shù)組的首地址。,使用前必須讓各元素指向?qū)ο蟆?int i, a34, *p3; for(i=0;i3;i+) p i =a i ; *(pi+j)=2; /*通過指針數(shù)組引用數(shù)組元素aij*/,2、用指針數(shù)組處理多字符串,例:用指針數(shù)組對(duì)字符串進(jìn)行排序。,#include void main(void ) int i, j ; char *ps = Get, Put, Time, Date, *p ; printf(排序前字符串 :n); for(i=0;i0) p=psi; psi=psj; ps

8、j=p; printf(排序后字符串 :n); for(i=0;i4;i+) puts(psi); ,循環(huán)實(shí)現(xiàn)排序,ps,2、指針數(shù)組訪問二維數(shù)組,通過指針數(shù)組輸出數(shù)組元素的值, 分析運(yùn)行結(jié)果。,#include void main( ) int i , j; int a33= 1,2,3, 4,5,6, 7,8,9 ; int *pa3= a0, a1, a2 ; int *p=a0; for (i=0 ; i3 ; i+) for (j=0; j3; j+) printf ( %5d, paij ); printf ( n ) ; for(i=0;i3;i+) printf(%d,%d,%

9、dn,ai2-i,*ai,*(*(a+i)+i); for(i=0;i3;i+) printf(%d,%d,%dn,*pai,pi,*(p+i); ,pa0,數(shù)組a的二維結(jié)構(gòu),pa1,pa2,a0,a1,a2,6.3 指針與函數(shù),6.3.1 指向函數(shù)的指針 概念:函數(shù)為程序?qū)嶓w,其代碼占據(jù)連續(xù)的內(nèi)存地址,其首地址 稱為函數(shù)的入口地址,用函數(shù)名表示。C語言通過指針指向函數(shù) 的入口地址(函數(shù)名),也可以實(shí)現(xiàn)函數(shù)的調(diào)用。,c=max(a,b);,int max(int x, int y) return (x=y?x:y); ,2400H,函數(shù)指針變量的定義:,type ( *p )( );,函數(shù)的類

10、型。,指針變量名,函數(shù),使用步驟:, 定義函數(shù)fname和指向函數(shù)的指針p; 指針指向函數(shù); p=fname; 通過指針引用函數(shù)。 格式:(* p)(實(shí)參表);, , ,main( ),舉例:求a、b的最大值。,#include int lmax(int,int); void main(void) int a,b,c; int (* funp)( ); funp=lmax; scanf(“%d,%d”, ,說明指向函數(shù)的指針。,指針指向函數(shù)。,funp,lmax,通過指針引用函數(shù)。,lmax,2100H,2100H,6.3.2 返回指針的函數(shù),概念:函數(shù)可以返回一個(gè)值,也可以返回一個(gè)地址(指針

11、),如果函數(shù)返回指針,稱為返回指針的函數(shù)。,定義: type *函數(shù)名(形參表) /* 函數(shù)體 */ ,int *max(int a, int b),注意: int (*p)( ) 和 int *p( ) 的區(qū)別: int (*p)( ) 是定義一個(gè) 變量(p是一個(gè)指向函數(shù)入口的指針變量); int *p( ) 則是定義一個(gè)函數(shù)(p是一個(gè)返回值為指針的函數(shù)),它還有函數(shù)體部分。,例: 輸入一個(gè)17之間的整數(shù),輸出對(duì)應(yīng)的星期名。,char *day_name(int n) char *name =“Illegal day”,”Monday”,”Tuesday”,”Wednesday”, “Thu

12、rsday”,”Friday”,”Saturday”,”Sunday”; return (n7) ? name0: namen) ; #include main ( ) int i; printf ( “Input Day No: n”); scanf ( “%d”, ,定義一個(gè)指針型函數(shù), 其返回值指向一個(gè)字符串,形參 n 為星期名對(duì)應(yīng)的整數(shù),exit為一庫(kù)函數(shù),exit(1)有錯(cuò)退出程序,exit(0)正常退出,name為一指針數(shù)組,每個(gè)元素均為指針變量。,運(yùn)行結(jié)果:,Input Day No: 2 Day No: 2 -Tuesday,6.3.3 main函數(shù)的參數(shù),如DOS命令:C:t

13、est aa bb cc,可執(zhí)行文件名,命令參數(shù),主函數(shù)main()也可以帶參數(shù),由于main()不能被其他函數(shù)調(diào)用,故無法在程序內(nèi)部取得實(shí)參值。它的參數(shù)來自dos提示符命令行(如用命令行運(yùn)行編譯連接好的.exe文件),實(shí)參就是命令行輸入的字符串。主函數(shù)一般有兩個(gè)參數(shù)。,void main(int argc, char *argv ) (函數(shù)體) ,整型變量。存放命令行字符串的個(gè)數(shù)(以空格分隔) 。,指向字符的指針數(shù)組。分別存放各字符串參數(shù)的地址。,舉例:編程顯示命令行輸入的參數(shù)。,#include void main(int argc, char *argv ) int i; printf(

14、argc=%dn, argc); for(i=0; iargc; i+) printf(argv%d=%sn ,i, argv i ); ,test How are you? (該程序名應(yīng)為test.c,編譯、連接后生成test.exe),C:,argc 4,*舉例:在字符串中查找特定的字符。,#include #include char *lstrchar ( char * , char ) ; void main ( void) char c , *p , str80 ; gets (str ) ; scanf ( “ %c ” , ,返回指針的函數(shù)。,指向空!, 課堂作業(yè):, #incl

15、ude main() int i; char s5,*p; for(i=0; is;p-) printf(%s,%cn,p,*p); ,寫出下列程序運(yùn)行結(jié)果。, #include int f(int *a,int n) if(n1) return *a+f(a+1,n-1); else return *a; void main() int aa10=1,2,3,4,5,6,7,8,9,10,s; s=f(aa+1,4); printf(%dn,s); , 思考題:, 作業(yè)題:,p188習(xí)題 一、選擇題 720。 二、填空題 47。 三、程序運(yùn)行題13。 四、程序填空題2、4。 五、程序設(shè)計(jì)題 2、3、6。,上機(jī)驗(yàn)證 p178 例 6.19 ,分析行指針定義(*p)n和指針數(shù)組定義*pn的異同點(diǎn),進(jìn)一步理解和記憶二維數(shù)組中數(shù)組元素和其地址的表示

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論