c语言程序设计-谭浩强-第10章指针2

上传人:tian****1990 文档编号:73978945 上传时间:2019-01-26 格式:PPT 页数:31 大小:756.81KB
返回 下载 相关 举报
c语言程序设计-谭浩强-第10章指针2_第1页
第1页 / 共31页
c语言程序设计-谭浩强-第10章指针2_第2页
第2页 / 共31页
c语言程序设计-谭浩强-第10章指针2_第3页
第3页 / 共31页
c语言程序设计-谭浩强-第10章指针2_第4页
第4页 / 共31页
c语言程序设计-谭浩强-第10章指针2_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《c语言程序设计-谭浩强-第10章指针2》由会员分享,可在线阅读,更多相关《c语言程序设计-谭浩强-第10章指针2(31页珍藏版)》请在金锄头文库上搜索。

1、共31张,1,8.5函数的指针和指向函数的指针变量 函数指针:函数在编译时被分配的入口地址,用函数名表示,函数指针变量赋值:如p=max;,函数返回值的数据类型,专门存放函数入口地址 可指向返回值类型相同的不同函数,指向函数的指针变量 定义形式: 数据类型 (*指针变量名)(); 如 int (*p)();,函数指针变量指向的函数必须有函数说明,函数调用形式: c=max(a,b); c=(*p)(a,b); c=p (a,b); 对函数指针变量pn, p+, p-无意义,( )不能省 int (*p)() 与 int *p()不同,共31张,2,例 用函数指针变量调用函数,比较两个数大小,m

2、ain() int max(int ,int); int a,b,c; scanf(“%d,%d“, ,main() int max(int ,int), (*p)(); int a,b,c; p=max; scanf(“%d,%d“, ,共31张,3,用函数指针变量作函数参数,例 用函数指针变量作参数,求最大值、最小值和两数之和,共31张,4,8.6 返回指针值的函数 函数定义形式: 类型标识符 *函数名(参数表); 例 int *f(int x, int y),例 指针函数实现:有若干学生成绩,要求输入学生序号后, 能输出其全部成绩,main() float score4=60,70,80

3、,90, 56,89,67,88,34,78,90,66; float *search(float (*pointer)4,int n), *p; int i,m; printf(“Enter the number of student:“); scanf(“%d“, ,共31张,5,例 写一个函数,求两个int型变量中居于较大值的变量的地址,2,3,2004,2000,*,共31张,6,例 写一个函数,求两个int型变量中居于较大值的变量的地址,2004,共31张,7,例 写一个函数,求两个int型变量中居于较大值的变量的地址,2,3,3,2,*,共31张,8,例 写一个函数,求两个int型

4、变量中居于较大值的变量的地址,不能返回形参或局部变量 的地址作函数返回值,2010,共31张,9,8.7 指针数组和指向指针的指针 用于处理二维数组或多个字符串 指针数组 定义:数组中的元素为指针变量 定义形式:存储类型 数据类型 *数组名数组长度说明; 例 int *p4;,指针所指向变量的数据类型,指针本身的存储类型,区分int *p4与int (*p)4,指针数组赋值与初始化,共31张,10,指针数组赋值与初始化,共31张,11,char name59=“gain”,“much”,“stronger”, “point”,“bye”;,char *name5=“gain”,“much”,“

5、stronger”, “point”,“bye”;,二维数组与指针数组区别:,二维数组存储空间固定 字符指针数组相当于可变列长的二维数组 分配内存单元=数组维数*2+各字符串长度,指针数组元素的作用相当于二维数组的行名 但指针数组中元素是指针变量 二维数组的行名是地址常量,共31张,12,main() int b23,*pb2; int i,j; for(i=0;i2;i+) for(j=0;j3;j+) bij=(i+1)*(j+1); pb0=b0; pb1=b1; for(i=0;i2;i+) for(j=0;j3;j+,pbi+) printf(“b%d%d:%2dn“,i,j,*pb

6、i); ,例 用指针数组处理二维数组,共31张,13,例 对字符串排序(简单选择排序),main() void sort(char *name,int n), print(char *name,int n); char *name=“Follow me“,“BASIC“, “Great Wall“,“FORTRAN“,“Computer “; int n=5; sort(name,n); print(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) temp=namei;

7、namei=namek; namek=temp; ,i=0,共31张,14,例 对字符串排序(简单选择排序),main() void sort(char *name,int n), print(char *name,int n); char *name=“Follow me“,“BASIC“, “Great Wall“,“FORTRAN“,“Computer “; int n=5; sort(name,n); print(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) t

8、emp=namei; namei=namek; namek=temp; ,name0,name1,name2,name3,name4,name,Great Wall,FORTRAN,Computer,Follow me,BASIC,i=1,共31张,15,例 对字符串排序(简单选择排序),main() void sort(char *name,int n), print(char *name,int n); char *name=“Follow me“,“BASIC“, “Great Wall“,“FORTRAN“,“Computer “; int n=5; sort(name,n); pri

9、nt(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp; ,name0,name1,name2,name3,name4,name,Great Wall,FORTRAN,Computer,Follow me,BASIC,i=2,共31张,16,例 对字符串排序(简单选择排序),main() void sort(char *name,int n), print(char *name,int n); char

10、 *name=“Follow me“,“BASIC“, “Great Wall“,“FORTRAN“,“Computer “; int n=5; sort(name,n); print(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp; ,name0,name1,name2,name3,name4,name,Great Wall,FORTRAN,Computer,Follow me,BASIC,i=3,

11、共31张,17,例 对字符串排序(简单选择排序),main() void sort(char *name,int n), print(char *name,int n); char *name=“Follow me“,“BASIC“, “Great Wall“,“FORTRAN“,“Computer “; int n=5; sort(name,n); print(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) temp=namei; namei=namek; namek=

12、temp; ,name0,name1,name2,name3,name4,name,Great Wall,FORTRAN,Computer,Follow me,BASIC,共31张,18,多级指针 定义: 指向指针的指针 一级指针:指针变量中存放目标变量的地址,例 int *p1; int *p2; int i=3; p2=,二级指针:指针变量中存放一级指针变量的地址,例 int *p; int i=3; p=,一级指针,单级间接寻址,二级指针,一级指针,目标变量,二级间接寻址,共31张,19,定义形式:存储类型 数据类型 *指针名; 如 char *p;,例 int i, *p; p= ()

13、/p是二级指针,不能用变量地址为其赋值,指针本身的存储类型,最终目标变量的数据类型,*p是p间接指向对象的地址 *p是p间接指向对象的值,例 int i=3; int *p1; int *p2; p1=,多级指针,例 三级指针 int *p; 四级指针 char *p;,共31张,20,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=r; r=s; s=t; main() int a=1,b=2,*p,*q; p= ,2000,2004,2000,共31张,21,例 一级指针与二级指针,#include void swap(int

14、 *r,int *s) int *t; t=r; r=s; s=t; main() int a=1,b=2,*p,*q; p= ,输出: 1,2,共31张,22,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=r; r=s; s=t; main() int a=1,b=2,*p,*q; p= ,输出: 1,2,共31张,23,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=*r; *r=*s; *s=t; main() int a=1,b=2,*p,*q; p= ,2

15、000,2004,2000,共31张,24,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=*r; *r=*s; *s=t; main() int a=1,b=2,*p,*q; p= ,2000,2004,输出: 2,1,共31张,25,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=*r; *r=*s; *s=t; main() int a=1,b=2,*p,*q; p= ,输出: 2,1,共31张,26,例 用二级指针处理字符串,#define NULL 0 void main() char *p; char *name=“hello“,“good“,“world“,“by

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号