C语言 第八单元 指针 与函数 程序设计语言C 西华师范大学 数学与信息学院
西华师范大学 数学与信息学院 教学目标 ●介绍C语言中 指针与函数的关系及 函数的参数的定义和调用
西华师范大学 数学与信息学院 学习要求 ●通过本单元的学习 能熟练掌握 比较复杂的函数的设计
西华师范大学 数学与信息学院 本单元授课内容 ●返回值为地址的函数 ●指针型的参数 ●指向函数的指针 ●指向函数的指针的数组 ●指向指针的指针 ●动态存储分配与内存管理 ●命令行参数
! "#$%&'()$*+ ,-.
西华师范大学 数学与信息学院 、返回值为地址的函数 ●通常,函数用返回值的形式为调用程序提供一个计 算结果。但有时需要返回值是一个地址。 ●在说明返回值为地址的函数时,用指针类型说明 符 char Strchr(char *string, int c) char strstr(char *string1, char string2 前者的功能为在字符串 string中查找字符c,如果 string中有字符c,则返回字符c的地址,否则返回 NULL。 ●后者的功能为在字符串 string1中查找子字符串 string2,如果 string1中包含有 string2,则返回 string2在 string1中的地址,否则返回空指针值 NULL。 00g
!"# $%&'"# () *+ ,-!.(/ 012.(3 0.( 4.( 54 6+ ,-!.(/ 0127.(/ 3 089 4 ! 0 54:$%
西华师范大学 数学与信息学院 例8-1 ●将表示月份的数值(12)转换成对应 的英文月份名称。 ●算法分析: 首先说明一个字符串数组 month 用来存放月份的英文名称。 在转换时只须按下标值返回一个字 符串的地址即可。
/0123 45678 9:23;?&@ ABCDEFGHI! JK$L239:;<= M45NOPQRSEFG HITU=
西华师范大学 数学与信息学院 c0801子函数 /*函数 month name0:将月份数值转换为英文名称* #include <dos. h) char *month name (int n) I static char *month[= [Illegal month January, February, March,April, May June,July, August,"Septeml ber October, "November/, dEcember return (n)=1&& n(=12)?month [n]: month[]
;?@AB?C=DEFG HIJKLMNOPYZA[ SAC\W?@AB?C=DER?@ ?F ]WY@C@RSWSAC\W?@A^_` ]WWabTTDcCTW=>?@Aad aeC?UC\fadWgDh\UC\fadWaiC\SAadWajk\RTadWaiCfad aeU?DadWaeUTfadWajUcUY@adWalDk@D=hD\ad mS@>hD\d n>oD=hD\d pDSD=hD\ qr \D@U\?WE?[`sWttW?X`suFv=>?@A^?_G=>?@A^w_r q
西华师范大学 数学与信息学院 c0801c主函数 void print date(struct date *d I printf(%s %d, %d", month name(d->da mon d->da day, d->da year):) main struct date today getdate(&today) / today da year= 1999 today. da mon=12 today. da day=29: * print date (&today
]WW k\R?@xEayY yVdWyVad=>?@AB?C=DEVz[VCB=>?Fd !!! " "!
西华师范大学 数学与信息学院 二、指针型的参数 ●函数的参数是用于传递数据信息的。例如: 调用函数: swap(a,b) 子函数: swap(int x, int y) ●指针型的参数则用于传递地址值信息。 例如:例71中介绍的sWap函数就使用两 个指针类型的参数。 void swap(int *xp, int *yp) swap( &a, &b)
! #$%&$'()*+$,-.%/012 3(#$2 4#$2 ! 567%&$8()*+9:;-./ 01 0"% #$?@(A B56C7%&$/ VWXY Z[\]^X_` ab]cX_` ad]e Z[\]^f\cgfhei
西华师范大学 数学与信息学院 例8-2 ●编写一个用于在字符串中查找某字符的函 数 ●算法分析: 从字符串的第一个字符查起,只要遇到 被查找的字符就返回该字符的地址; 如果查遍整个字符串都没有发现待查 字符,则返回空值NULL。 若还要查找串中其它要找的字符,应从 当前地址的下一个地址开始查起。 00g
jkEFJlMGHImnopGH = >?&@ qGHIrEFGHns Otuv wnoGHxyGH z{n|}FGHI~n GH = tnoImtoGH8q REFns=