《C语言教程课件Ch10-4字符串指针.ppt》由会员分享,可在线阅读,更多相关《C语言教程课件Ch10-4字符串指针.ppt(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、10.1 10.1 指针的概念指针的概念指针的概念指针的概念10.2 10.2 变量的指针和指向变量的指针变量变量的指针和指向变量的指针变量变量的指针和指向变量的指针变量变量的指针和指向变量的指针变量10.3 10.3 数组的指针和指向数组的指针变量数组的指针和指向数组的指针变量数组的指针和指向数组的指针变量数组的指针和指向数组的指针变量10.4 字符串的指针和指向字符串的指针变量字符串的指针和指向字符串的指针变量10.5 10.5 函数的指针和指向函数的指针变量函数的指针和指向函数的指针变量函数的指针和指向函数的指针变量函数的指针和指向函数的指针变量10.6 10.6 返回指针的函数返回指针
2、的函数返回指针的函数返回指针的函数10.7 10.7 指针数组和指向指针的指针指针数组和指向指针的指针指针数组和指向指针的指针指针数组和指向指针的指针10.8 10.8 有关指针的数据类型和指针运算的小结有关指针的数据类型和指针运算的小结有关指针的数据类型和指针运算的小结有关指针的数据类型和指针运算的小结一、字符串的表示形式一、字符串的表示形式 1字符数组:字符数组:存放存放字符串字符串。例:例:void main()static char string=I Love China!;printf(%sn,string);2字符串指针变量:字符串指针变量:指向指向字符串字符串。例:例:void
3、main()char *string=I Love China!;printf(%sn,string);10.4 10.4 字符串的指针和指向字符串的指针变量字符串的指针和指向字符串的指针变量字符串的指针和指向字符串的指针变量字符串的指针和指向字符串的指针变量 void main()static char a=I am a boy.,b20;int i;for(i=0;*(a+i)!=0;i+)*(b+i)=*(a+i);*(b+i)=0;printf(string a is:%sn,a);printf(string b is:%sn,b);例例1:将字符串将字符串a复制到字符串复制到字符串b
4、中。中。方法方法1:void main()char a=I am a boy.,b20,*p1,*p2;p1=a;p2=b;for(;*p1!=0;p1+,p2+)*p2=*p1;*p2=0;printf(string a is:%sn,a);printf(string b is:%sn,b);方法方法2:I a m a b o y .0ap1p2Imab o y.0char *p1=I am a boy.,*p2;二、字符串指针作函数参数二、字符串指针作函数参数void copy_string(char from,char to)int i=0;while(fromi!=0)toi=from
5、i;i+;toi=0;void main()static char a=I am a teacher.;static char b=You are a student.;printf(string_a=%snstring_b=%sn,a,b);copy_string(a,b);printf(string_a=%snstring_b=%sn,a,b);例例2:用函数调用实现字符串的复制。:用函数调用实现字符串的复制。方法方法1:问问:对字符数组对字符数组a a与与b b的长度有否限制的长度有否限制?方法方法2:void copy_string(char*from,char*to)for(;*fr
6、om!=0;from+,to+)*to=*from;*to=0;I a m a t e a c h e r .0 Y o u a r e a s t u d e n t .0 void main()char*a=I am a teacher.;char *b=You are a student.;printf(string_a=%snstring_b=%sn,a,b);copy_string(a,b);printf(string_a=%snstring_b=%sn,a,b);abfromtoIa mataech er.0例例3:有一个长度不大于有一个长度不大于40的字符串的字符串,已知其中总包
7、已知其中总包含两个字符含两个字符A,求处于两个字符求处于两个字符A中间的字符个数中间的字符个数,及这些字符及这些字符.int sub(char*x,char*y)int i,n=0;for(i=0;*(x+i)!=0;i+)if(*(x+i)=A)break;do i+;*(y+n)=*(x+i);n+;while(*(x+i+1)!=A);*(y+n)=0;return(n);void main()char a40,b40;int l;int sub(char*x,char*y);gets(a);l=sub(a,b);printf(l=%dn,l);printf(%sn,b);char*a=
8、I love china;char*a;a=I love china;三、字符指针变量与字符数组的区别三、字符指针变量与字符数组的区别1.字符指针变量中存放的是字符指针变量中存放的是地址地址,绝决不是将字符,绝决不是将字符串放到字符指针变量中。串放到字符指针变量中。2.赋初值的方式:对数组可以在变量定义时整体赋赋初值的方式:对数组可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。初值,但不能在赋值语句中整体赋值。char str14=“I love China!;char str14;str=“I love China!”;3指针变量可以指向一个字符型数据,但如果未指针变量可以指向一个字
9、符型数据,但如果未 对它赋以一个地址值,则它并未具体指向哪一对它赋以一个地址值,则它并未具体指向哪一 个字符数据。个字符数据。如如:char *a;scanf(%s,a);是错误的是错误的4指针变量的值是可以改变的,而数组名所指的指针变量的值是可以改变的,而数组名所指的 地址是固定的。地址是固定的。如:如:main()char *a=I love China!;a=a+7;printf(%s,a);运行结果:运行结果:China!5用指针变量指向一个格式字符串。用指针变量指向一个格式字符串。如:如:void main()static char a=I love China!;a=a+7;pri
10、ntf(%s,a);是错误的!是错误的!char *format;format=a=%d,b=%fn;printf(format,a,b);printf(a=%d,b=%fn,a,b);例例4:4:有两个字符串有两个字符串str1,str2,str1,str2,编程序将编程序将str1,str2str1,str2中对应字符较大的放到数组中对应字符较大的放到数组str3str3中中.void main()char*str1=Chinese,*str2=India,str340;ccc(str1,str2,str3);puts(str3);str1str2C h i n e s e 0 I n d
11、 i a 0str3 void ccc(char*s1,char*s2,char*s3)int i;for(i=0;*(s1+i)!=0&*(s2+i)!=0;i+)*(s3+i)=*(s1+i)*(s2+i)?*(s1+i):*(s2+i);if(*(s1+i)=0)while(*(s2+i)!=0)*(s3+i)=*(s2+i);i+;if(*(s2+i)=0)while(*(s1+i)!=0)*(s3+i)=*(s1+i);i+;*(s3+i)=0;C h i n e s e 0 I n d i a 0s1s2s3In in ese0 void main()char*str1=Chinese,*str2=India,str340;ccc(str1,str2,str3);puts(str3);问问:能否将能否将 char str340;char str340;改为改为 char*str3;char*str3;10.5 10.5 函数的指针和指向函数的指针变量函数的指针和指向函数的指针变量函数的指针和指向函数的指针变量函数的指针和指向函数的指针变量
限制150内