C程序设计教程与实训(第二版)第7章_第1页
C程序设计教程与实训(第二版)第7章_第2页
C程序设计教程与实训(第二版)第7章_第3页
C程序设计教程与实训(第二版)第7章_第4页
C程序设计教程与实训(第二版)第7章_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、第7章,信息学院计算机基础组,指 针,指针的基本概念 指向数组的指针 指针与函数 指针数组,本章主要内容:,7.1 引例,例7-1:从键盘输入两个整型数据并求这两个整数之和。,程序代码如下: #include void main() int x,y,sum int *px,*py; px = ,直接访问原来的变量x,y的值进行运算的方式,称为直接引用; 而使用指针访问数据的方式就称为间接引用。,7.2.1 指针变量的定义,7.2指针变量的定义和引用,指针变量的定义 一般形式:存储类型 数据类型 * 指针名;,合法标识符,指针变量本身的存储类型,指针的目标变量的数据类型,表示定义指针变量 不是*

2、运算符,例 int * p1,* p2; float * q ; static char * name;,注意: 1、int * p1,* p2;与int * p1,p2; 2、指针变量名是p1,p2 ,int *为变量p1,p2的类型 3、指针变量只能指向定义时所规定类型的变量,1.指针定义的初始化,int x; int *px=/*初始化*/,2.指针的赋值运算,int x; int *px; px=/*赋值运算*/,7.2.2 指针变量的引用,指针运算 * 和 取址运算 int *px=,例7-2 判断一个整数是否为偶数,用指针完成。,程序代码如下: #include int x = 1

3、0; char res; int *px; px = /*用指针运算访问指针px的目标变量,判断其奇偶性*/ else res=N printf(“%c”,res); ,例 main( ) int i=10; int *p; *p=i; printf(“%d”,*p); ,危险!,main( ) int i=10,k; int *p; p= ,特别注意:,指向一块随机的空间,指针变量必须先赋值,再使用,7.2.3 指针变量的应用,程序代码如下: #include void main() int x = 10,y = 20,*px,*py, t; px = ,例7-3 使用指针交换两个整型变量的

4、值。,若本问题写成7-4所示的形式,会怎样?,程序代码如下: #include void main() int x = 10,y = 20,t,*px,*py,*pt; px= ,例7-4 使用指针交换两个整型变量的值。,int m5=0; int *p; p=,例如:p+1 m1 p+3 m3,7.3 指针与数组,7.3.1指向数组元素的指针,mi pi *(m+i)*(p+i),可见,引用数组元素可以有指针法和下标法两类方法,如下四种情况:,指针法和下标法,例7-6 将含有8个元素的整型数组中的每个元素值增1后输出。,程序代码如下: #include void main() int i,a

5、8=1,2,3,4,5,6,7,8; int *pa; for(pa =a; paa+8;pa+) /*指针pa做循环控制变量*/ *pa=*pa+1;/*用pa引用各元素*/ pa=a; for(i=0;i8;i+) printf(“%d”,*pa); ,pa,第一个循环结束后pa,7.3.2指针和字符串,程序代码如下: #include void main() char str128,*cp; int digit = 0; gets(str); for(cp = str;*cp!=0;cp+) if(*cp = 0 ,例7-7 从键盘输入一个字符串,统计其中数字字符的个数。,用字符指针处理

6、字符串的几种形式:,1.字符指针指向字符数组 char str128,*cp; cp=str; 2.直接用字符串为字符指针初始化 char *s = Character Point; 3.字符指针定义后,用字符串为其赋值。 char *s ; s=Character Point;,7.3.3指针与二维数组的关系,程序代码如下: #include void main() int i; int a43 = 1,5,9,2,6,10,3,7,11,4,8,12; int *p= ,1指向二维数组元素的指针,例7-9用指向二维数组元素的指针输出数组全部元素。,7.3.3指针与二维数组的关系,2指向一行

7、元素的指针,类型说明符(*指针名)M;,指向一行元素的指针,也就是指向了一个由多个元素组成的一维数组,这种指针称为行指针。 相应的,原来的指向数组元素的指针就对应的称为列指针。,行指针定义的基本形式如下:,行指针的运算,1)行指针加减常数运算: 2)行指针与列指针的相互转换: 3)行指针的赋值运算,int a43; int (*p)3; p=a,例7-10 使用行指针输出例7-9数组的全部元素。,程序代码如下: #include void main() int i,j,x43 = 1,5,9,2,6,10,3,7,11,4,8,12; int (*p)3; p=x;/*行指针常量x赋值给行指针

8、变量p*/ for(i = 0;i 4;i+) for(j=0;j3;j+) printf(%3d, *(*(p+i)+j) ); ,行指针转换成列指针用于访问二维数组元素:,程序代码如下: #include void main() int i,j,x43 = 1,5,9,2,6,10,3,7,11,4,8,12; int (*p)3; p=x;/*行指针常量x赋值给行指针变量p*/ for(i = 0;i 12;i+) printf(%3d, *(*p+i) ); ,7.4 指针与函数,7.4.1指针作为函数的参数,程序代码如下: #include void swap(int *x,int

9、*y) /*指针作为函数的参数*/ int z; z = *x;*x = *y;*y = z; void main() int a ,b; scanf(%d%d, ,例7-11 编写函数,交换两个变量的值。,例7-12 编写函数,计算Fibonacci数列前20项,并在主函数中输出,程序代码如下: #include int *px,x20 = 1,1,i; px=x; void GenFib(int *m); GenFib(px); for(i = 0;i 20;i+) printf(%d ,xi); void GenFib(int *m) int i; for(i=2;i20;i+) *(m

10、+i)= *(m+i-1)+*(m+i-2); ,指针或数组作函数参数的各种调用形式,本质上是:地址作函数的参数,7.4.2 返回值为指针的函数,类型说明符* 函数名(形参表) 函数体 ,基本形式如下:,例7-13求某个一维数组所有元素中最大值的下标,用返回指针值的函数来实现。,程序代码如下: #include #include int *MaxValue(int t,int n) int *p=t; int i; for(i = 0;i n;i+)j if(*p ti) p = ,void main() int x55,j,k,*pl = x0; int (*px)5 = x;for(j =

11、 0;j 25;j+) *pl+ = rand(); for(j = 0;j 5;j+,px+) pl = MaxValue(*px,5); printf(%dt,*pl); ,7.4.3 函数指针,类型说明符 (*指针变量名)(参数列表),指向函数的指针存放的是某个函数的首地址,这种能够保存函数地址的指针也称为函数指针。,定义函数指针的一般形式如下:,(*指针变量名)(实参列表),函数指针在调用时的一般形式如下:,例7-14 定义两个函数,分别求和与求差,使用函数指针调用函数求解。,程序代码如下: #include int sub(int x,int y) return x - y; int

12、 add(int x,int y) return x + y; ,void main() int a = 3,b = 9,j; int (*p)(int,int); p=add; j = (*p)(a,b); printf(Add=%dn,j); p = sub; a = -7; b = 4; j = (*p)(a,b); printf(Sub=%dn,j); ,7.5 指针数组和指向指针的指针,7.5.1 指针数组,指针数组定义的一般形式如下: 类型说明符 *指针变量名数组元素个数,例7-15 给指针数组赋值,程序代码如下: #include void main() int x3 = 123

13、,456,y22 = 7,8,9,z = 10,i; int *px5; px0 = x; px1 = ,例7-16 用字符指针数组完成多个字符串的打印,程序代码如下: #include void main() int i; char ch3128 = This is a Point,This is a String,It is a Array; char *cp4; char s=A; for(i = 0;i3;i+) cpi = chi; cp3= ,7.5 指针数组和指向指针的指针,7.5.2 指向指针的指针,指向指针的指针变量定义的一般形式为: 类型说明符 *指针变量名,指针的指针、指

14、针以及普通变量之间的关系:,指向指针的指针变量基本用法,例7-17 #include void main() int x5 = 1,3,5,7,9,y22 = 2,4,6,8,z=10; int *px,*py,*pz,*p; int i,j; pz = ,接下页,指向指针的指针变量基本用法,for(i=0; i2;i+) for(j=0;j2;j+) printf(%dt,*(*p+i*2+j); printf(n); for(i=0; i2;i+) py=yi;p= ,7.5 指针数组和指向指针的指针,7.5.3 命令行参数与字符指针数组,带有参数的主函数定义的基本形式如下: 类型说明符 main(int argc,ch

温馨提示

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

评论

0/150

提交评论