预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共81页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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); #defineN5 main() { 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