C语言程序设计实例教程 教学课件 ppt 作者 潘志安 朱运乔 余小燕 第10章 指针

上传人:E**** 文档编号:89386662 上传时间:2019-05-24 格式:PPT 页数:23 大小:2.18MB
返回 下载 相关 举报
C语言程序设计实例教程 教学课件 ppt 作者 潘志安 朱运乔 余小燕 第10章 指针_第1页
第1页 / 共23页
C语言程序设计实例教程 教学课件 ppt 作者 潘志安 朱运乔 余小燕 第10章 指针_第2页
第2页 / 共23页
C语言程序设计实例教程 教学课件 ppt 作者 潘志安 朱运乔 余小燕 第10章 指针_第3页
第3页 / 共23页
C语言程序设计实例教程 教学课件 ppt 作者 潘志安 朱运乔 余小燕 第10章 指针_第4页
第4页 / 共23页
C语言程序设计实例教程 教学课件 ppt 作者 潘志安 朱运乔 余小燕 第10章 指针_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《C语言程序设计实例教程 教学课件 ppt 作者 潘志安 朱运乔 余小燕 第10章 指针》由会员分享,可在线阅读,更多相关《C语言程序设计实例教程 教学课件 ppt 作者 潘志安 朱运乔 余小燕 第10章 指针(23页珍藏版)》请在金锄头文库上搜索。

1、第10章 指针,指针是语言中的重要概念,也是语言的重要特色。使用指针,可以使程序更加简洁、紧凑、高效。 1 指针和指针变量的概念 2 指针变量的定义及指针操作 3 指针变量的应用 4 指针和一维数组 5 指针和二维数组 6 指针和字符串 7 指针和函数,1.认识指针,指针和指针变量的概念,程序中: short i; float k;,内存中每个存储单元都有一个编号-地址,i,k,编译或函数调用时为其分配内存单元,变量是对程序中数据 存储空间的抽象,2.指针的概念 变量的地址:变量对应存储单元的首地址; 指针:即变量的地址; 指针变量:专门存放变量地址的变量即指针变量。,指针和指针变量的概念,.

2、,.,2000,2004,2006,2005,整型变量i,10,2001,2002,2003,2000,指针,变量的内容,变量的地址,变量i_pointer,1.指针变量的定义 类型说明符 *变量名; 例如:int *p1; 对指针变量的定义包括三个内容: 指针类型说明(*),即定义变量为一个指针变量; 指针变量名(p1); 变量值(指针)所指向的变量(目标)的数据类型(int)。 2.指针的常用操作 &和*运算符 *目标运算符(间接访问运算符),取指针所指向的目标变量的内容 &取地址运算符,取变量的地址,指针变量的定义及指针操作,例1:给指针变量赋值 方式一:初始化 int x=3; int

3、 *p= 说明: 指针变量一定要先赋初值而后引用目标,所赋初值一定要为某变量或数组地址(如例1); 如果需明确指出暂时没有目标,最好按如下方式赋值,以免出现目标的错误引用: P=NULL 或p=0。,指针变量的定义及指针操作,方式二:赋值语句 int x=3; int *p; p=,任务1 将例1补充成完整的程序 void main() int x=3; int *p= ,指针变量的定义及指针操作,指针作为函数参数 任务2.定义一个函数,用来交换两个整型变量的值,并通过主函数调用验证。,指针变量的应用,void swap(int *x,int *y); main() int a = 1, b

4、= 2; printf(“a = %d, b = %dn”, a, b); swap( ,1.数组和指针的关系 数组名是表示数组首地址的地址常量 指针变量是存放变量地址的变量 2.指向数组元素的指针变量 例 int array10; int *p; p=,指针和一维数组,3.指针的算术运算 p i (i为整型数) p+, p-, p+i, p-i, p+=i, p-=i等 若p1与p2指向同一数组? p1-p2=两指针间元素个数;(p1-p2)/d p1+p2 无意义 4.数组元素表示方法 有:int a10,*p=a;,指针和一维数组,ai *(a+i),ai pi *(p+i) *(a+i

5、),pi *(p+i),任务3.定义一一维数组,从键盘输入元素值,并输出。要求用指针表示数组元素 void main() int i,*p,a7; p=a; for(i=0;i7;i+) scanf(“%d“,p+); printf(“n“); p=a; for(i=0;i7;i+,p+) printf(“%d“,*p); ,指针和一维数组,任务4.输入10个整数,找出最大值并输出。要求用指针表示数组元素 void main() int a10,*p=a,*pmax=a,i; for(i=0;i10;i+) printf(“请输入第%d个数:“,i+1); scanf(“%d“,p+); p=

6、a+1; for(i=1;i10;i+,p+) if(*pmax*p) pmax=p; printf(“max=%dn“,*pmax); ,指针和一维数组,这里”一维数组作为函数参数”是指将数组名(数组首地址)为实参传递给处理函数的办法。 任务5.利用函数找出数组中的最大值。 int arr_max( int p ,int n) int imax=0,i; for(i=1;in;i+) if(pimaxpi) imax=i; return imax; main() int a10 , i ; for(i=0;i10;i+) scanf(“%d“,ai); printf(“max=%dn”,ar

7、r_max(a,10) ); ,一维数组作为函数参数,一维数组作为函数参数,在上述数组参数传递过程中,形参和实参共有四种组合可选用: 注:数组包含了首地址(数组名)和元素个数信息,所以一般传输数组时要同时传数组长度。,1.二维数组元素的地址表示 设定义二维数组为:int a34 一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a0,a1,a2。每一个一维数组又含有四个元素。 由图示知: a+i为i行整体的行地址。 ai+j为i行j列元素的地址,即&aij。 数组a的i行j列元素用指针法可表示为*(ai+j)或*(*(a+i)+j),指针和二维数组,2. 指向二维数组的指

8、针变量 把二维数组a分解为一维数组a0,a1,a2之后,设p为指向二维数组的指针变量。 可定义为:int (*p)4 它表示p是一个指针变量,它指向的“目标”为包含4个元素的一维数组。 指向二维数组的指针变量说明的一般形式为: 类型说明符 (*指针变量名)长度 其中“类型说明符”为数组元素的数据类型。“*”表示其后的变量是指针类型。“长度”为所指一维目标的元素个数。,指针和二维数组,任务6.用指向二维数组的指针变量处理二维数组 main() int a34=0,1,2,3,4,5,6,7,8,9,10,11; int(*p)4; int i,j; p=a; for(i=0;i3;i+) for

9、(j=0;j4;j+) printf(“%2d “,*(*(p+i)+j); printf(“n“); ,指针和二维数组,任务7.利用函数找出二维数组中每行当中的最大值。 main() int a34, i, j; for(i=0; i3; i+) for(j=0; j4; j+) scanf(“%d”, ,二维数组作为函数参数,二维数组作为函数参数,在上述二维数组参数传递过程中,形参和实参共有四种组合可选用:,在语言中,既可以用字符数组表示字符串,也可用字符指针变量来表示;引用时,既可以逐个字符引用,也可以整体引用。 1.逐个引用 任务8 使用字符指针变量表示和引用字符串。 main() c

10、har *string=”I love Beijing.”; for(; *string!=0; string+) printf(“%c”, *string); printf(“n”); 程序运行结果: I love Beijing. 程序说明:char *string=“I love Beijing.“;语句 定义并初始化字符指针变量string:用串常量“I love Beijing.”的地址(由系统自动开辟、存储串常量的内存块的首地址)给string赋初值。 该语句也可分成如下所示的两条语句: char *string; string=“I love Beijing.“;,字符串的表示与

11、引用,2.整体引用 任务9 采取整体引用的办法,改写任务8。 main() char *string=”I love Beijing.”; printf(“%sn”,string); 3.字符指针变量与字符数组之比较 虽然用字符指针变量和字符数组都能实现字符串的存储和处理,但二者是有区别的,不能混为一谈。 (1)存储内容不同。字符指针变量中存储的是字符串的首地址,而字符数组中存储的是字符串本身(数组的每个元素存放一个字符)。 (2)赋值方式不同。对字符指针变量,可采用下面的赋值语句赋值: char *pointer; pointer=“This is a example.“; 而字符数组,虽然

12、可以在定义时初始化,但不能用赋值语句整体赋值。下面的用法是非法的: char char_array20;char_array=“This is a example.“; /*非法用法*/ (3)指针变量的值是可以改变的,字符指针变量也不例外;而数组名代表数组的起始地址,是一个常量,而常量是不能被改变的。,字符串的表示与引用,任务10用函数调用方式,实现字符串的复制。 void string_copy(char *sfrom, char *sto) int i=0; while( stoi=sfromi)!=0) i+ ; /*循环体为空语句*/ main() char str120=”I am

13、 a teacher.”; char str220; string_copy(str1, str2); /*数组名作实参*/ printf(“str2=%sn”, str2); ,字符串指针作函数参数,任务11 改写任务5.利用函数找出数组中的最大值。 int *arr_max( int *p ,int n) int imax=0,i; for(i=1;in;i+) if(pimaxpi) imax=i; return p+imax; main() int a10 , i , *pa; for(i=0;i10;i+) scanf(“%d“,ai); pa= arr_max(a,10) prin

14、tf(“max=%dn”, *pa );,返回指针值的函数,1.函数指针的概念 一个函数在编译时,被分配了一个入口地址,这个地址就称为该函数的指针。 可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数。 2.指向函数的指针变量 (1)定义格式 函数类型 (*指针变量)( ); 注意:“*指针变量”外的括号不能缺,否则成了返回指针值的函数。 例如,int (*fp)(); /* fp为指向int函数的指针变量*/ (2)赋值 函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值。 指向函数的指针变量函数名; (3)调用格式 (*函数指针变量)(实参表),函数的指针和指向函数的指针变量,

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

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

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