C语言ppw,ppt课件-c语言程序设计教程(第2版).ppt

本文介绍了如何利用C语言中的指针和数组实现字典排序,通过指针传递实现字符串交换,并探讨了指针作为函数参数的特性。涉及的示例包括计算字符串长度、在字符串中查找字符位置以及函数返回指针的应用。同时,还讨论了函数指针的概念及其在程序设计中的作用。
摘要由CSDN通过智能技术生成

ppt课件-c语言程序设计教程(第2版)

8.3 指针与数组的关系 例13: 编写程序,对一组英文单词字符串进行按字典排列方式(从小到大)进行排序。 分析:可以用字符指针数组来保存每一个字符串,这样数组中的每一个元素就可以指向一个字符串,通过对数组元素中的字符进行比较,就可以完成字典排序。 设计一个排序函数:void sort(char *words[ ], int n),可以对words中的n个字符串进行排序。 程序:example8_13.c ?分析程序中排序函数void sort(char *words[ ], int n)的实现算法。 ?思考:其他的算法。 8.4 指针作为函数的参数 ?指针作为变量,也可以用来作为函数的参数。 ?若函数的参数类型为指针型,则实参与形参的传递是一种“传址”方式。 ?如果函数中有对形参值的改变,实际上也就是修改了实参的值。 例14:从键盘输入任意两个整数作为两个变量的值,编写程序,将这两个变量的值进行交换。 分析:可设计函数void swap(int *p1,int *p2),通过指针与变量的关系,交换指针p1和p2所指变量的值。 程序:example8_14.c 8.4 指针作为函数的参数 例15:用字符指针指向从键盘输入的字符串,编写程序,计算输入的字符串的长度。输入结束时的换行符不作为字符计入其长度。 分析: 用字符指针来表示字符串时,指针指向的是字符串的首地址。 输入结束时,系统会将结束标志‘\0’置于字符串的尾部。 计算字符串的长度时,结束标志是不计数的。 ?若输入的字符串为“abcdefg”,则占用的内存单元为8个,但字符串的长度为7。 ?设计函数int getlength(char *str),计算str所指字符串的长度。 字符串的结束标志和输入的换行符均不计入字符的长度。 程序:example8_15.c 8.4 指针作为函数的参数 ?请分析统计字符串长度函数的算法。 ?思考: 程序中结束标志(‘\0’)和换行符(‘\n’)均不计入字符的长度,若用如下的程序语句: while(*p!='\0' || *p!='\n') p++; 来统计字符串的长度,是否能达到要求?为什么? 8.5 函数的返回值为指针 ?指针作为一种变量,也可以作为函数的返回值。 ?若函数的返回值为指针,则称其为指针函数。 ?指针函数的定义形式为: [存储类型] 数据类型 *函数名 ([形参表]); 例如: int *fun1( ); /* 函数返回一个指向整型变量的指针 */ char *fun2( ); /* 函数返回一个指向字符型变量的指针 */ 例16:编写程序,从键盘输入一个字符ch,在字符串string中查找是否存在有该字符,若存在,给出该字符在字符串中第1次出现的位置。 分析:对于指定的字符串string,在内存中会分配一段连续的空间存储string中每一个字符的值,将输入的字符ch与字符串string中的每一个字符进行比较,如果相等,则返回字符串中与字符ch相等的字符的位置(地址)。 ?设计函数char* search(char *str,char c), 功能:在str所指的字符串中,查找是否有字符变量c的字符, 如果有,返回字符串中相同字符的地址。 程序:example8_16.c * 8.6 指向函数的指针 ?函数指针就是指向函数的指针,用函数指针存放函数的入口地址。 ?函数指针的定义形式: [存储类型] 数据类型 (*变量名)(); ?数据类型为指针所指函数的返回值的数据类型。 ?请注意定义中的两个圆括号。 如:int (*p)( ); p是一个函数指针变量,所指函数的返回值为int型。 ?为函数指针赋值: 函数指针变量=函数名; ?用函数指针调用函数,调用形式为: (*函数指针变量名)(实参表); 例17:阅读下面的程序,了解函数指针的使用。 程序:exmaple8_17.c *8.6 指向函数的指针 ?提示: 仅仅用函数指针替代函数名去调用函数(如程序exam8-17.c),就失去了函数指针本身的意义。 ?使用函数指针的意义: 将函数指针设计成函数的形参,调用函数时,参数传递的是函数名。 例如: int sub(int (*p1)( ), int (*p2)( ), int a , int b) { int m, n; m=(*p1)(a, b) ; n=(*p1)(m, a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值