收藏 分享(赏)

指针变量.ppt

上传人:weiwoduzun 文档编号:5763554 上传时间:2019-03-16 格式:PPT 页数:41 大小:360KB
下载 相关 举报
指针变量.ppt_第1页
第1页 / 共41页
指针变量.ppt_第2页
第2页 / 共41页
指针变量.ppt_第3页
第3页 / 共41页
指针变量.ppt_第4页
第4页 / 共41页
指针变量.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、第 十 章 指 针,10.1 指针的概念,一、内存单元的内容和内存单元的地址:内存区域被划分成一个一个的内存单元,一个内存单元可 以存放一个字节的数据,每一个内存单元都有一个编号,统称 为地址。例:int i=3;char j=s;,变量i变量j,编译时为变量i分配2000和2001两 个字节的内存单元,为j分配2003 一个字节的内存单元,200220043000,2000 2001,2003,地址,75,内存单元,因为内存单元的地址就是“指向”了该内存单元,故通常把内存单元的地址称为指针。,3,二.内存单元的访问:,直接访问:通过变量名访问。char j=s; printf(“%c”, j

2、 );间接访问:通过该变量的指针来访问。p=称:指针变量p指向变量j,p是变量j的指针。,75,2000,j,75,2000,j,p,变量的指针:是一个变量的地址,是常量。 指针变量:是存放变量地址的变量,其值是该变量的地址。要引用指针,必须定义指针。定义指针,是为了通过指针访问内存单元。一个数组或函数占有一段连续内存单元,假如将一个数组或函数的首地址赋给指针变量,通过指针就可以找到该数组或函数。,10.2 变量的指针,一、指针变量的定义类型标识符 * 标识符例如:int *p “标识符”是指针变量名。 如 p “*”表示定义指针变量 “类型标识符”表示该指针变量所指向的变量类型。 指针指向一

3、个变量的地址,用*表示指向。,二、指针变量的引用,指针变量只能存放地址。 未经赋值的指针变量不能用。 C语言提供两种相关地址运算符:,类型说明中的*表示 定义指针变量,表达式中的*是运算符 *p表示p指向地址里的值,5,2000,2002,.,.,3000,p,三、指针变量的赋值:,(1)、int a,*pa;pa= (5)、char *pc;pc=“c language”;,/*整型变量a的地址赋给指针变量pa*/*指针变量p取得整型变量a的地址.*/*指针pa的值赋给指针pb*/*将数组a的首地址赋给相同类型的指针pa*/*将字符串的首地址赋给指针变量*/,例10.1main () int

4、 a,b; int *pointer_1, *pointer_2; /* 定义指针变量 */ a = 100; b = 10; pointer_1 = 程序运行结果:,&a,&b,100,10,pointer-1,pointer-2,a,b,100,10 100,10,例10.2 输入a和b两个整数,按先大后小的顺序输出a和b。main () int *p1, *p2, *p , a, b; scanf(“%d,%d“, 运行:5,9,&a,5,p1,a,&b,9,p2,b,p,a=5,b=9; max=9,min=5 该例不交换变量a、b的值,而是交换指针p1、p2的值。,&b,&a,四、指

5、针变量作为函数的参数,例10.3 题目要求同例10.2,输入a和b两个整数,按先大后小的顺序输出a和b。swap( int* p1,int *p2 ) /*交换指针p1、p2所指向的变量的值 */ int p; p = *p1; *p1 = *p2; *p2 = p; main () int a, b; int *pointer_1, *pointer_2; scanf(“%d,%d“, ,把变量a和b的地址传送给形参,10.3 数组的指针,指针可以指向数组和数组元素,对数组元素的访问: 既可以使用数组下标,也可以使用指针。 一、指向数组元素的指针变量指向数组元素的指针变量,其类型应与数组元素

6、相同。例1: int a7; int *p;p=,/*指的是把数组a的首地址赋给指针p*/,二、通过指针引用数组元素,设:int a10,*p=,如果数组元素是整型,p+1表示p的地址加2; 如果数组元素是实型,p+1表示p的地址加4; a表示数组首地址。,p+i 和a+i 指向元素ai。 (2).*(p+i) 访问元素ai;例: *(p+5)和*(a+5) 与a5等效; (3).指向数组指针可以带下标:例: pi与*(p+i)等效.,1、下标法main () int a10; int i; for(i=0;i10;i+) scanf(“%d“, ,例10.5 输出数组的全部元素。(设10个整

7、数),特点:常用、过程简单直观,2、用数组名计算数组元素的地址。main( ) int a10; int i; for(i=0;i10;i+) scanf(“%d“, ,特点:不移动指针 但要计算每个元素的地址 费时间,3、用指针访问各元素。main () int a10; int *p , i; for(i=0;i10;i+) scanf(“%d“, ,特点:移动指针 速度快,例:通过以下程序输出a数组中的10个元素。,main() int a10,*p,i;p=a;for(i=0;i10;i+)scanf(“%d“,p+);printf(“n“);for(i=0;i10;i+,p+)pri

8、ntf(“%dt“,*p); ,?试问:以上程序可以输出a数组中的10个元素吗?,1、形参和实参都用数组名,main()int array10;f( array ,10);,f( int arr,int n) ,三、数组名作函数参数,main()int array10;f(array ,10);,f( int *arr,int n) ,2、实参用数组名,形参用指针变量。,main() int array10,*p;p=array;f(p,10); ,f( int *arr,int n) ,3、实参、形参都用指针变量。,main() int array10,*p;p=array;f(p,10);

9、 ,f( int arr ,int n) ,4、实参用指针变量,形参用数组名。,10.4 字符串的指针,一、字符串的表现形式C语言中,有两种方式可以实现字符串:字符数组、字符指针。例10.16:字符数组main() char string =“How are you!”; printf(“%sn“,string); ,string是数组名,代表字符数组的首地址。 数组可以用下标访问,也可以用指针访问,用字符串对字符数组赋值,main() char *name1 =”Mary“;char *name2=“Hare”;printf(“%10s%10sn“,name1,name2); ,name1、

10、name2是指针变量,char *name1 =“Mary”;等价于:char * name1; name1 = “Mary”; 它把字符串常量的首地址赋给指针name1.,例10.17字符指针,main () char a = “I am a boy.“; char b20; int i; for (i=0; *(a+i) !=0; i+) *(b+i) = *(a+i); *(b+i) = 0; printf(“string a is: %sn“,a); printf(“string b is:“); for (i=0; bi !=0; i+) printf(“%c“,bi); print

11、f(“n“); ,特点:不移动指针,用数组名计算数组元素的地址,例10.18 将字符串a复制到字符串b。,main () char a = “I am a boy.“,b20,*p1,*p2;int i;p1=a;p2=b;for ( ; *p1 !=0; p1+,p2+)*p2 = *p1; *p2 = 0;printf(“string a is: %sn“,a);printf(“string b is:“);for (i=0; bi !=0; i+)printf(“%c“,bi);printf(“n“);,特点:移动指针,例10.19:用指针处理字串复制.,例10.21: main() c

12、har *a=“I love china!”;a=a+7;printf(“%s”,a); 运行结果如下:China!,(a+7)是用指针指向数组元素ai的第7个字符,可以看到:1、字符数组和字符指针的概念不同。2、字符指针指向字符串,而C语言中, 字符串按数组方式处理,因此,字符指 针和字符数组的访问方式相同。,10.5 函数指针,一、用函数指针变量调用函数函数指针定义的一般形式:函数返回值类型(*指针变量名)( )例: int (*p)( ) 说明:(*p)( ) 表示定义一个指向函数的指针变量, 它不固定指向哪一个函数,它是专门用来存放函数的入口 地址的,该函数返回一个整型值。 C规定:函

13、数的名称就就代表函数的入口地址。,用函数名调用子函数max() int max(int x, int y); /*原型*/ int z; if (xy) z = x; else z = y; return z; main () int a,b,c; scanf(“%d,%d“, ,例9.23 求a和b中的大者。,用函数指针调用函数max() int max(int x, int y) /*原型*/ int z; if (xy) z = x; else z = y; return z;main () int (*p) (int, int); /*定义函数指针p */int a,b,c; p =

14、max; /*函数max的入口地址赋给函数指针p*/ scanf(“%d,%d“, ,用函数指针变量调用函数时,只须将(*p)代替函数名max,并加上实参,例9.23 求a和b中的大者。,10.6 返回指针的函数 (自学),一般形式:类型标识符 * 函数名(参数表)例、 int * a (int x, int y) 声明一个函数,函数名为a,其返回值类型是“指向整型 的指针”, 函数形式参数为int x 和 int y。注意:在a的两侧分别为*运算符和( )运算符,a先与( ) 结合,这是函数形式;函数前有个*号,表示该函数为指针 型函数.,10.7 指针数组和指向指针的指针 (自学),一、指

15、针数组 概念:指针数组是一个数组,该数组中的每一个元素均是指针变量。 形式:类型标识符 *数组名数组元素个数例: int * p4;定义一个指针数组,数组名p,有4个元素, 每一个元 素是指向整型变量的指针。如:char *name3=”math”,”computer”,”ccm”; 可用 puts(namei) 语句输出。,二、指向指针的指针定义举例:char * * p; char *name=“Ann”,“Hare”,“Jack”;p=name;p是一个指向指针的指针。被p指向的指针指向字符变量。,二维字符数组,name指针数组,main() int i;char *name=“Ann“

16、,“Hare“,“Jack“,“Mary“; char *p;printf(“n Studentss names are:n“);for(i=0;i4;i+) p=name+i; printf(“%6st“,*p); 运行结果: Ann Hare Jack Mary,p,二维字符数组,name指针数组,name3,mary,程序举例:,10.8 指针使用小结,一、有关指针的数据类型 定义: int i; 定义整型变量i int *p; p是指向整型数据的指针变量 int an; 定义数组a,元素类型为int,元素个数是n int *pn; p是指针数组,包含n个指针,每一个指针可以指向整型数据

17、 int f(); f是函数,返回值是int int (*p)(); p是函数指针,所指向的函数返回整型数据 int *p(); p是函数,返回值是指针,该指针指向整型数据 int *p; p是指针,指向一个指向整型数据的指针,二、指针运算小结1、指针变量加/减运算p+、p-、p+i、p-i、p+=i、p-=i加1表示指向下一个数据。 2、指针变量赋值p = 指针变量可以由空值,NULL的值为0,3、空指针 p = NULL空指针p=NULL表示p不指向任何数据。 在stdio.h中,NULL被定义为0:#define NULL 0习惯上,不使用 p = 0而使用 p = NULL 指针变量p

18、可以与NULL作比较, 例: if (p = = NULL) .注意:空指针不指向任何数据,与p未赋值不同。当p未赋值时,其值是不确定的,而空指针的值是确定数0。,、指针变量相减 当p1、p2指向同一个数组的元素,指针相减p2-p1等于p1、p2间的元素个数。 注意:指针相加无意义。5、两个指针的比较 当p1、p2指向同一个数组的元素时可以比较,如:p1 p2。表示p1在p2之后。若p1、p2不是指向同一个数组的元素,比较无意义。,三、空类型指针 void void *p,表示p是空类型指针,它可以指向任何数据类型。 空类型指针与其他类型指针之间赋值时,应进行强制类型转换, 例、 char *

19、p1;void *p2;p1 = (char *)p2;p2 = (void *)p1;,第10 章 课堂练习,10.1 指针变量a所指的字符串长度为 ,这个长度是可以用strlen(a)测出来的。char *a=“nMY Name is”zhang li”.n”;(1)26 (2) 27 (3) 28 (4) 24 (5) 2310.2 下面程序的作用是: 将两个变量中的值互换,请检查程序是否正确,如不正确的,改正之。main ( )int a=3,b=4;int *p1,*p2,*p;p1=,10.3已知p1和p2为指针变量, 且已指向同一个整型数组中的元素,a是一个整型变量,问下面哪一个语句不能正确执行?(1) a=*p1 (2) a=*p1+*p2(3) a=*p1-*p2 (4) p1=a-p2 10.4 有一个二维数组a34,第2行第3列元素的正确表示方法为 。(1) &a23 (2)a2+3 (3) *(a+2)+3 (4)*(a2+3) 10.5 指向一个包含4个整型元素的一维数组的指针变量的定义形式为:(1) int (*p)4 (2) int *p4 (3) int * (p4) (4) int (*p) ,第10 章 课堂练习,10.6 若有语句:int a=4,*p= 4) Por,第10 章 课堂练习,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报