《地址和指针》PPT课件.ppt

上传人:小飞机 文档编号:5631281 上传时间:2023-08-04 格式:PPT 页数:19 大小:320.99KB
返回 下载 相关 举报
《地址和指针》PPT课件.ppt_第1页
第1页 / 共19页
《地址和指针》PPT课件.ppt_第2页
第2页 / 共19页
《地址和指针》PPT课件.ppt_第3页
第3页 / 共19页
《地址和指针》PPT课件.ppt_第4页
第4页 / 共19页
《地址和指针》PPT课件.ppt_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《《地址和指针》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《地址和指针》PPT课件.ppt(19页珍藏版)》请在三一办公上搜索。

1、第七章地址和指针,主要内容地址和指针的概念指针变量的定义给指针变量赋值对指针变量的操作指针在函数方面的应用,7.1 地址和指针的概念,地址和指针的概念1.“地址”的概念在计算机里每一个存储数据的存储单元也都必须具有一个唯一的“地址”,以示区别不同存储单元的位置。“地址”是用于确定对象的位置,存储的数据是反映具体的内容。2.存储单元“地址”的表示在计算机中存储数据的存储单元,是根据存储数据类型的不同而不同。int a;a占2个单元分别为1012,1013float b;b占4个单元,10141017char c;c占1个单元,1018,a,b,c,XXXXXXXXXX,XXXXXXXXXX,XX

2、XXXXXXXX,XXXXX,3.“指针”的概念在计算机中用户获取某一地址存储单元内的数据有两个方式:第一种方式是直接访问:根据变量名,直接获取变量存储单元中的数据。如:printf(“%d”,a);第二种方式是间接访问:知道存储单元的“地址”,再根据已知地址获取存储单元中的数据指针变量:用于存储其他变量的地址的变量。只能存储地址,不能存储普通数据。,1012,1012,变量a,1012 1013,指针变量p,2002,指针变量p,2002,为什么使用指针例7.1欲想调用fun函数,计算出两个数相加和相减的值,然后在main函数中显示结果。fun(int x,int y)int add=0,s

3、ub=0;add=x+y;sub=x-y;main()int a,b,add=0,sub=0;scanf(“%d%d”,例7.2fun(int x,int y,int*padd,int*psub)*padd=x+y;*psub=x-y;main()int a,b,add=0,sub=0;scanf(“%d%d”,通过指针可以非常方便地实现在调用函数时修改或传回多个数值。,8,5,原值0新值13,原值0新值3,main 函数 a,b,add,sub,变量add的地址是1001,变量sub的地址是1001,8,5,1001,2001,Fun函数x,y,指针变量 padd,指针变量psub,调用fu

4、n函数时,0,13,1001,add,调用前,调用后,1001,7.2指针变量的定义和指针变量的基类型,指针变量的定义和指针变量的基类型定义指针变量的一般形式如下:类型名指针变量名1,指针变量名2,.;“*”说明符用来说明所定义的变量是指针变量。例如:int*pi,*pj;说明了pi和pj是两个指向整型变量的指针,也就是说变量pi和pj中只能存放int类型变量的地址。这时称int是指针变量pi和pj的基类型。double*pd;定义了一个指向双精度类型变量的指针。char*s1,s2;定义了一个指向字符型变量的指针和一个字符变量int*p;定义了一个指向指针的指针变量p。该指针变量p只能存放基

5、类型为int类型的指针变量的地址。,2000,1010,5,1010,a,q,2000,2050,p,7.2.2 指针变量的基类型的作用在C语言中,不同的数据类型变量系统为它们开辟的存储空间的字节数是不同的。int类型的数据存储空间是2个字节,float类型的数据存储空间是4个字节,char类型的数据存储空间是1个字节。系统表示每一个存储空间的地址时,是取该存储空间的第1个字节的地址作为该变量存储空间的地址。根据指针变量p中存放的“地址”,只能寻找到变量a第1个字节的存储空间,它并不是变量a的原值,因为变量a原值是通过2个字节来数据。例int*p;p=,1012,变量a,1012 1013,指

6、针变量p,2002,7.3给指针变量赋值,使指针指向一个对象1.通过求地址运算符()把一个变量的地址赋给指针变量“”是求地址运算符,该运算符为单目运算符,用于求变量的地址,且该变量必须为内存变量。例如:int k=1,j=2,*q1,*q2,*p;float x=4.5;q1=NULL是在stdio.h头文件中定义的预定义符,因此使用NULL时,应该在程序的前面应加上预定义命令行:#include“stdio.h”,7.4 对指针变量的操作,通过指针或地址引用一个存储单元当指针变量中存放了一个确切的地址值时,通过指针可以用“间接运算符”()来引用该地址所代表的存储单元。1.在赋值号右边由“*”

7、运算符和指针变量组成的表达式,代表指针所指存储单元的内容。例如:int*p,i=10,j;p=,例7.3指针指向三个变量,通过指针运算选出数值最小的那个数并打印出来。main()int a,b,c,min,*pa,*pb,*pmin;pa=,指针(变量)的运算1.指针的移动指针的移动就是指当指针指向一串连续的存储单元时,对指针变量加上或减去一个整数时,结果是指针了邻近的存储单元,使指针变量中存放的地址值发生了变化。当对指针变量加、减一个整数时,数字1、2并不代表1个字节,2个字节,而是代表1个存储单元,2个存储单元。除此之外,不允许对指针进行乘、除,也不允许对两个指针加法运算,也不允许对指针加

8、、减一个实型的常量。2.指针的比较比较两个指针实质上是比较两个指针变量中存放的地址值的大小。当多个指针指向一串连续指向一串连续的存储单元时,指针比较才有意义。,7.5指针与一维数组,利用地址和指针访问数组元素数组名、元素地址及指针的关系(1)数组名代表着这个数组所占连续存储空间的起始地址。数组名是一个地址常量。(2)每个数组元素都是数组这个集合中的一分子,由于数组所占地址空间是连续的,通过数组名这个首地址就可以找到数组中的所有元素;每个数组元素都可以看作是一个带下标的变量,它完全可以像普通变量一样进行求地址运算。x+1等价于是非法,因为a是常量。,通过数组首地址访问数组元素 int x10,i

9、 x+0 等价于 表示数组x中的元素可以有以下四种形式:xi*(x+i)*(p+i)pi,7.6 指针与二维数组,二维数组与一维数组及指针的关系1.二维数组是由一维数组嵌套组成的2.二维数组名和一维数组名是基类型不同的地址常量int a34,*p a是二维数组的首地址;a0是第0行元素的首地址;指针变量pr是一个行指针,它可以指向包含4个整型元素的一维数组。,通过地址引用二维数组元素 int a34,i,j;通过地址引用二维数组元素的常见形式有:(1)*(ai+j)(2)*(*(a+i)+j)(3)(*(a+i)j通过指针数组引用二维数组元素 int a34,*pa3,i;pa前面带有*号,说

10、明数组中的每个元素都是基类型为整型的指针。所以pa为指针数组。(1)paij 等价于aij(2)*(pai+j)等价于*(ai+j)(3)*(*(pa+i)+j)等价于*(*(a+i)+j)(4)(*(pa+i)j 等价于(*(a+i)j,7.7动态存储分配,动态存储分配的函数提供用户选用。void*malloc(unsigned int k)动态分配存储空间大小为k个字节并返回首字节地址。例:int*pn=malloc(sizeof(int);void*calloc(unsigned int n,unsigned int k)动态分配存储空间大小为n*k个字节并返回首字节地址。例:int*p

11、a=calloc(10,sizeof(double);void realloc(void*ptr,unsigned int k)动态分配存储空间大小为k个字节并返回首字节址,同时把ptr把指向的动态存储空间的内容复制到新分配的动态存储空间,该函数调用的返回值通常也赋给ptr所对应的实参指针。例:pa=realloc(pa,20*sizeof(double);动态释放函数void free(void*ptr)把ptr所指向的动态存储空间释放掉。例:free(pa)这些函数在stdlib.h头文件中。,P152例51#include“stdio.h”#include“stdlib.h”void main()unsigned int i,n;unsigned int*a;printf(“输入一个班组的人数:”);scanf(“%d”,小结,地址、指针与指针变量地址是指每个存储单元唯一的固定的编号。指针变量是存放地址的变量。取地址运算符间接访问运算符指针在函数方面的应用,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号