C语言程序设计教程(第2版)课件第9章.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:81 大小:1.1MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

C语言程序设计教程(第2版)课件第9章.ppt

C语言程序设计教程(第2版)课件第9章.ppt

预览

免费试读已结束,剩余 71 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第9章指针预备知识地址:为了访问内存中的某个存储单元,我们要为它编号,这种编号称为内存地址。通过地址我们就能够访问该地址所标识的存储单元。变量的地址:变量在内存中总占用几个连续的字节,开始字节的地址,就是变量的地址。9.1指针的含义9.2指针变量9.2.2指针变量的定义⑵定义中的“*”表示所定义的变量是指针变量,但指针变量名是ptr1、ptr2,而非*ptr1、*ptr2。首先介绍指针运算符(&,*)说明:我们还可以用这种方法实现对变量的改变:9.2.3指针变量赋值与初始化指针的加减运算(+、-)⑵指针与指针的加运算毫无意义,所以指针与指针没有加运算。2.指针的++、--、+=、-=运算基类型相同的两个指针进行比较运算,其意义是两个指针的位置比较,结果是逻辑值。9.3指针与数组一维数组元素的引用程序举例:输出10个元素数组中的全部元素。方法三:用指针变量指向数组元素main(){inta[10]={54,65,8,2,3,56,8,21,57,98},*p,i;p=a;for(printf("\n"),i=0;i<10;i++)printf("%4d",*p++);}⑵利用指针变量编程时特别要注意指针变量的当前值。9.3.2二维数组的指针2.通过指针引用二维数组元素总结,对二维数组的引用有三种方式:①下标法。如a[i][j]或p[i][j]。②指针法,如*(*(p+i)+j)或*(*(a+i)+j)。③下标指针混合法,如(a[i]+j),(p[i]+j),(*(a+i))[j],(*(p+i))[j],*(a[0]+i*n+j)等。注意:3.通过一个行指针变量引用二维数组的元素例:使用行指针变量访问数组元素。9.4指针与函数图示交换过程中存储单元内容的变化:想一想:如果函数的参数不用指针而用整数,能否实现值的交换?为什么?9.4.2指针型函数例:编写能返回结果串地址的串拷贝函数。每一个函数都占用一段内存,在编译时,被分配一个入口地址,这个入口地址就称为函数的指针。⑴(*p)()表示定义一个指向函数的指针变量,它不是固定指向哪个函数。4.函数的调用例:求a和b中的大者。9.4.3一维数组的指针作为函数参数1.数组名作实参例:从10个数中找出其中最大值和最小值。上例中如果形参数组用指针变量,则程序如下:数组名做函数参数小结:例:实参、形参都用指针变量的形式2.数组元素地址作实参当用数组元素的地址作为实参时,因为是地址值,所以对应的形也应当是基类相同的指针变量。3.函数的指针形参和函数体中数组的区别当用数组元素的地址作为实参时,因为是地址值,所以对应的形也应当是基类相同的指针变量。9.4.4二维数组的指针作为函数参数9.5指针与字符串9.5.1单字符串说明:⑷字符数组名是指针常量,只能表示一个确定的字符串,不能改变。而字符指针变量的值是可以改变的,它可以代表不同的字符串。程序举例:将字符串a复制为字符串b。上例程序还可写成:一、指针数组的有关概念二、定义多字符串的方法三、指针数组的应用方法⑵:用指针数组指向字符串常量。9.6字符数组与字符指针的区别9.7.1定义形式指向指针的指针变量(也称多级指针)只能存放指针变量的地址。1.指向行指针的指针变量定义形式:数据类型*(*变量名)[指向的数组长度];例如:int*(*p)[4];2.指向指针的指针数组其定义形式为:数据类型**数组名[数组长度];例如:int**b[6];3.指向行指针的指针数组定义的一般形式为:数据类型*(*变量名[数组长度])[指向的数组长度];例如:int*(*b[3])[4];9.7.2传给main函数的参数例:若以下面程序编译后生成可执行程序file.exe,在DOS提示符下按下述形式执行程序:fileChinaBejingShenyang写出程序运行结果。void指针类型介绍:例如:char*p1;inta=2;void*p2;p2=&a;p1=(char*)p2;voidsort(char*ps[],intn);#defineN5main(){char*ps[100],i;for(i=0;i<N;i++)ps[i]=(char*)malloc(60);for(i=0;i<N;i++)gets(ps[i]);sort(ps,N);for(i=0;i<N;i++)puts(ps[i]);}9.8指针的数据类型小结本章程序举例:习题9.2:输入3个字符串,按由小到大的顺序输出。习题9.3:写一函数,将一个3×3的矩阵转置。习题9.4:写一函数,实现两个字符串的比较。。习题9.5:写一个函数,求字符串的长度,在main函数中输入字符串,并输出其长度。习题9.6