C语言第13讲指针与字符串(字符数组).ppt_第1页
C语言第13讲指针与字符串(字符数组).ppt_第2页
C语言第13讲指针与字符串(字符数组).ppt_第3页
C语言第13讲指针与字符串(字符数组).ppt_第4页
C语言第13讲指针与字符串(字符数组).ppt_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

合肥工业大学 WANGJINLING 6.2.3 指针与字符串(字符数组) C语言用字符数组存放字符串。 字符数组:元素个数确定,一般用下标控制循环。 字符串:有效字符个数由0确定,用结束符0控制循环。 字符数组名和字符串的值都是地址(字符串的首地址 ) 1、字符串的访问方法: 直接引用字符串: char *chp,ch =”abcde”; /*定义字符指针和字符数组*/ chp=ch; /*指针指向字符数组*/ putchar( *(chp+2); /*通过指针引用数组元素*/ printf(“%s,%s”,ch+1,chp+2); 引用字符数组: char *chp; /*说明字符指针*/ chp=“Hello!”; /*指针指向字符串*/ puts(chp); /*通过指针引用字符串*/ 字符指针可直接指向字符串:char *chp=“Hello!”; 输出 ? 无名一维字符数组 0 合肥工业大学 WANGJINLING 例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(“The new string is:%sn”,str); 例2:在输入的字符串中删除指定的字符 2000Hp str0 str1 str2 0 2000H 2001H 2002H 2003H 2004H 2005H 2006H ch 0 i 运行程序: abcdef c 2000Hstr a b d e f 0 a b c d e f c str printf(“%s”,ps); 或: puts(ps) The new string is: abdef 合肥工业大学 WANGJINLING 字符指针(变量)与字符数组的区别 字符指针与字符数组:两者均可存储和运算字符串。 主要区别: 存储格式不同: 字符指针变量中存放的是字符串的首地址 (2字节);而字符数组中存放的是整个字符串(一个数组元素 存放一个字符)。 性质不同:字符数组名是地址常量,不能改变(指向首字 符); 字符指针是地址变量,可以改变(指向不同的字符)。 赋值方式不同: 字符指针 char *ps=“Hello”; char *ps; ps=“Hello”; 字符数组 char st =“Hello”; char st80; st=“Hello” 或:st =“Hello” 用循环逐个赋值或 用strcpy()函数赋值 合肥工业大学 WANGJINLING 例: 统计字符串中的各元音字母的个数(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 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); 循环遍历数组元素 判断字母。 判断字符串是否结束 合肥工业大学 WANGJINLING 2. 字符串指针做函数参数(见P183 表6-2) #include void cpystr(char *s1, char *s2) while(*s2!=0 ) *s1+=*s2+; *s1=0; void main (void ) char str120,str2 =“123456abcdef“; printf(“str2: %sn“,str2); printf(“str1: %sn“,str1); cpystr(str1,str2); printf(“str2: %sn“,str2); printf(“str1: %sn“,str1); 去掉该句,对程 序结果是否有 影响? 例: 编写函数,用指针进行字符串的复制, 合肥工业大学 WANGJINLING 6.2.4 指针数组 指针是存放其它数据对象地址的变量。也可以构成数组。每 个数组元素均为一个指针变量,且在内存中连续存放。 1. 指针数组定义 格式: type *数组名元素个数; int *p 4 ; 定义(说明)p是含有4个元素的指针数组,每个元素都是 一个指向整型变量的指针(二级指针) 。 p 0 p 1 p 2 p 3 数组名p为数组的首地址。 使用前必须让各元素指向对象。 int i, a34, *p3; for(i=0;i void main(void ) int i, j ; char *ps = “Get“, “Put“, “Time“, “Date“, *p ; printf(“排序前字符串 :n“); for(i=0;i0) p=psi; psi=psj; psj=p; printf(“排序后字符串 :n“); for(i=0;i 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 ; i=y?x:y); 2400H 函数指针变量的定义: type ( *p )( ); 函数的类型。 指针变量名 函数 使用步骤: 定义函数fname和指向函数的指针p; 指针指向函数; p=fname; 通过指针引用函数。 格式:(* p)(实参表); main( ) 合肥工业大学 WANGJINLING 举例:求a、b的最大值。 #include int lmax(int,int); void main(void) int a,b,c; int (* funp)( ); funp=lmax; scanf(“%d,%d”, printf(“Max. is %dn”,c); int lmax(int x, int y) return (xy?x:y); 说明指向函数的指针。 指针指向函数。 funp lmax 通过指针引用函数。 lmax 2100H 2100H 合肥工业大学 WANGJINLING 6.3.2 返回指针的函数 概念:函数可以返回一个值,也可以返回一个地址(指 针),如果函数返回指针,称为返回指针的函数。 定义: type *函数名(形参表) /* 函数体 */ int *max(int a, int b) 注意: int (*p)( ) 和 int *p( ) 的区别: int (*p)( ) 是定义一个 变量(p是一个指向函数入口的指 针变量); int *p( ) 则是定义一个函数(p是一个返回值为指针的函 数),它还有函数体部分。 合肥工业大学 WANGJINLING 例: 输入一个17之间的整数,输出对应的星期名。 char *day_name(int n) char *name =“Illegal day”,”Monday”,”Tuesday”,”Wednesday”, “Thursday”,”Friday”,”Saturday”,”Sunday”; return (n7) ? name0: namen) ; #include main ( ) int i; printf ( “Input Day No: n”); scanf ( “%d”, if (i %s n”, i ,day_name( i ); 定义一个指针型函数, 其返回值指向一个字符串 形参 n 为星期名对应的整数 exit为一库函数,exit(1)有错退出程序,exit(0)正常退出 name为一指针数组,每个元素均为指针变量。 运行结果:Input Day No: 2 Day No: 2 Tuesday 合肥工业大学 WANGJINLING 6.3.3 main函数的参数 如DOS命令:C:test aa bb cc 可执行文件名 命令参数 主函数main()也可以带参数,由于main()不能被其他函数 调用,故无法在程序内部取得实参值。它的参数来自dos提示 符命令行(如用命令行运行编译连接好的.exe文件),实参就是 命令行输入的字符串。主函数一般有两个参数。 void main(int argc, char *argv ) (函数体) 整型变量。存放 命令行字符串的个 数(以空格分隔) 。 指向字符的指针数 组。分别存放各字符 串参数的地址。 合肥工业大学 WANGJINLING 举例:编程显示命令行输入的参数。 #include void main(int argc, char *argv ) int i; printf(“argc=%dn“, argc); for(i=0; i argc 4 argv0 argv1 argv2 argv3 test0 How0 are0 you?0 合肥工业大学 WANGJINLING *举例:在字符串中查找特定的字符。 #include #include char *lstrchar ( char * , char ) ; void main ( void) char c , *p , str80 ; gets (str ) ; scanf ( “ %c ” , p=lstrchar (str ,c ) ; if (p=NULL ) printf (“char %c not foundn”, c ) ; else printf (“The position is %d” ,p-str ) ; char *lstrchar (char *s , char ch ) char *chp=NULL ; while (*s+!=0) if (*s=ch) chp = s ;break ; return chp ; 返回指针的函数。 指向空! 合肥工业大学 WANGJINLING 课堂作业: #include main() int i; char s5,*p; for(i=0; is;p-) printf(“%s,%cn“,p,*p) ; 写出下列程序运行结果。 #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); 合肥工业大学 WANGJINLING 思考题: 作业题: p188习题 一、选择题 720。 二、填空题 47。 三、程序运行题13。 四、程序填空题2、4。 五、程序设计题 2、3、6。 上机验证 p178 例 6.19 ,分析行指针定义(*p)n和指针数 组定义*pn的异同点,进一步理解和记忆二维数组中数组元 素和其地址的表示方法。 合肥工业大学 WANGJINLING 编程题: #include #define N 3 void ss(int c3,int *s1,int *s2); void main(void) int aNN,bN; int i,j,k,sum1,sum2; for(i=0;iN;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论