C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt

C语言第13讲指针与字符串(字符数组).ppt

6.2.3 指针与字符串(字符数组) C语言用字符数组存放字符串。 字符数组元素个数确定,一般用下标控制循环。 字符串有效字符个数由0确定,用结束符0控制循环。, 字符数组名和字符串的值都是地址(字符串的首地址 ,1、字符串的访问方法 直接引用字符串,char *chp,ch ”abcde”; /*定义字符指针和字符数组*/ chpch; /*指针指向字符数组*/ putchar *chp2; /*通过指针引用数组元素*/ printf“s,s”,ch1,chp2;, 引用字符数组,char *chp; /*说明字符指针*/ chp“Hello”; /*指针指向字符串*/ putschp; /*通过指针引用字符串*/,字符指针可直接指向字符串char *chp“Hello”;,输出 ,无名一维字符数组 0,例1 输出字符串,include void main char s “computer”, *pss ; while*ps0 putchar*ps; ps; ,main char str80, *p, ch; int i0; pstr; getsp; chgetchar; for ; *p0;p if*pch stri*p; stri0; printf“The new string issn”,str; ,例2在输入的字符串中删除指定的字符2000H,p,0,ch0,i,运行程序 abcdef c, ,2000H,str,c,strprintf“s”,ps; 或 putsps,The new string is abdef,字符指针变量与字符数组的区别,字符指针与字符数组两者均可存储和运算字符串。 主要区别 存储格式不同 字符指针变量中存放的是字符串的首地址2字节;而字符数组中存放的是整个字符串一个数组元素存放一个字符)。 性质不同字符数组名是地址常量,不能改变指向首字符; 字符指针是地址变量,可以改变指向不同的字符。 赋值方式不同,字符指针,char *ps“Hello”;char *ps; ps“Hello”;,字符数组,char st “Hello”;,,char st80; st“Hello” 或st “Hello”,用循环逐个赋值或用strcpy函数赋值,例 统计字符串中的各元音字母的个数P182 例6.15,include void mainvoid char str80,*p; int a0,e0,i0,o0,u0; getsstr; forpstr;*p0a case 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“a3dne3dni3dno3dnu3dn“,a,e,i,o,u; ,循环遍历数组元素,判断字母。,判断字符串是否结束,2. 字符串指针做函数参数(见P183 表6-2),include void cpystrchar *s1, char *s2 while*s20 *s1*s2; *s10 printf“str2 sn“,str2; printf“str1 sn“,str1; cpystrstr1,str2; printf“str2 sn“,str2; printf“str1 sn“,str1; ,去掉该句,对程序结果是否有影响,例 编写函数,用指针进行字符串的复制6.2.4 指针数组,指针是存放其它数据对象地址的变量。也可以构成数组。每个数组元素均为一个指针变量,且在内存中连续存放。,1. 指针数组定义,格式 type *数组名元素个数;,int *p 4 ;,定义(说明)p是含有4个元素的指针数组,每个元素都是 一个指向整型变量的指针(二级指针) 。,数组名p为数组的首地址。,使用前必须让各元素指向对象。,int i, a34, *p3; fori0;i3;i p i a i ; *pij2; /*通过指针数组引用数组元素aij*/,2、用指针数组处理多字符串,例用指针数组对字符串进行排序。,include void mainvoid int i, j ; char *ps “Get“, “Put“, “Time“, “Date“, *p ; printf“排序前字符串 n“; fori0;i0 ppsi; psipsj; psjp; printf“排序后字符串 n“; fori0;i4;i putspsi; 循环实现排序,ps,2、指针数组访问二维数组,通过指针数组输出数组元素的值, 分析运行结果。,include void main int i , j; int a33 1,2,3, 4,5,6, 7,8,9 ; int *pa3 a0, a1, a2 ; int *pa0; for i0 ; i3 ; i for j0; j3; j printf “ 5d“, paij ; printf “n“ ; fori0;i3;i printf“d,d,dn“,ai2-i,*ai,**aii; fori0;i3;i printf“d,d,dn“,*pai,pi,*pi; ,pa0,数组a的二维结构,pa1,pa2,a0,a1,a26.3 指针与函数,6.3.1 指向函数的指针 概念函数为程序实体,其代码占据连续的内存地址,其首地址 称为函数的入口地址,用函数名表示。C语言通过指针指向函数 的入口地址(函数名),也可以实现函数的调用。cmaxa,b;,int maxint x, int y return xyxy; ,2400H函数指针变量的定义,type *p ;,函数的类型。,指针变量名,函数,使用步骤, 定义函数fname和指向函数的指针p; 指针指向函数; pfname; 通过指针引用函数。 格式* p实参表;, , ,main ,举例求a、b的最大值。,include int lmaxint,int; void mainvoid int a,b,c; int * funp ; funplmax; scanf“d,d”, ,说明指向函数的指针。,指针指向函数。funp,lmax,通过指针引用函数。,lmax2100H2100H,6.3.2 返回指针的函数,概念函数可以返回一个值,也可以返回一个地址(指针),如果函数返回指针,称为返回指针的函数。,定义 type *函数名(形参表) /* 函数体 */ ,int *maxint a, int b,注意 int *p 和 int *p 的区别 int *p 是定义一个 变量(p是一个指向函数入口的指针变量); int *p 则是定义一个函数(p是一个返回值为指针的函数),它还有函数体部分。,例 输入一个17之间的整数,输出对应的星期名。,char *day_nameint n char *name “Illegal day”,”Monday”,”Tuesday”,”Wednesday”, “Thursday”,”Friday”,”Saturday”,”Sunday”; return n7 name0 namen ; include main int i; printf “ Day No n”; scanf “d”, ,定义一个指针型函数, 其返回值指向一个字符串,形参 n 为星期名对应的整数,exit为一库函数,exit1有错退出程序,exit0正常退出,name为一指针数组,每个元素均为指针变量。运行结果, Day No 2 Day No 2 Tuesday,6.3.3 main函数的参数如DOS命令Ctest aa bb cc,可执行文件名,命令参数,主函数main也可以带参数,由于main不能被其他函数调用,故无法在程序内部取得实参值。它的参数来自dos提示符命令行如用命令行运行编译连接好的.文件,实参就是命令行输入的字符串。主函数一般有两个参数。,void mainint argc, char *argv 函数体 ,整型变量。存放命令行字符串的个数以空格分隔 。,指向字符的指针数组。分别存放各字符串参数的地址。,举例编程显示命令行输入的参数。include void mainint argc, char *argv int i; printf“argcdn“, argc; fori0; iargc; i printf“argvdsn “,i, argv i ; ,test How are you 该程序名应为test.c,编译、连接后生成test.,C,argc 4,举例在字符串中查找特定的字符。,include include char *lstrchar char * , char ; void main void char c , *p , str80 ; gets str ; scanf “ c ” , ,返回指针的函数。,指向空, 课堂作业, include main int i; char s5,*p; fori0; is;p printf“s,cn“,p,*p; ,写出下列程序运行结果。, include int fint *a,int n ifn1 return *afa1,n-1; else return *a; void main int aa101,2,3,4,5,6,7,8,9,10,s; sfaa1,4; printf“dn“,s; , 思考题 作业题,p188习题 一、选择题 720。 二、填空题 47。 三、程序运行题13。 四、程序填空题2、4。 五、程序设计题 2、3、6。,上机验证 p178 例 6.19 ,分析行指针定义*pn和指针数组定义*pn的异同点,进一步理解和记忆二维数组中数组元素和其地址的表示方法。,编程题,include define N 3 void ssint c3,int *s1,int *s2; void mainvoid int aNN,bN; int i,j,k,sum1,sum2; fori0;iN;i forj0;jN;j scanf“d“, ,用指针编写函数分别求二维方阵主、辅对角线上元素的和 sum1 和 sum2。 要求在主函数中输入a44,通过函数用指针求a44主、辅对角线元素的和。 见 ktzyss.c,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值