C语言学习文档之指针培训

上传人:痛*** 文档编号:242498640 上传时间:2024-08-25 格式:PPTX 页数:29 大小:106.94KB
返回 下载 相关 举报
C语言学习文档之指针培训_第1页
第1页 / 共29页
C语言学习文档之指针培训_第2页
第2页 / 共29页
C语言学习文档之指针培训_第3页
第3页 / 共29页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第8章 指针,8.1,变量的地址和指针,2.数据在内存中的存储方式:,按数据类型在内存为其分配一定数量的存储单元(字节)。,1.内存单元的地址:,计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号,这个编号就称为内存地址,3.内存单元的内容:,即变量的值。,例如有定义:,short int a,b;,char c;,float x;,变量a,b,c,x的内存分配情况:,a,b,x,c,2000,2001,2002,2003,2004,2005,2006,2007,2008,每个变量的地址是指该变量所占存储单元的,第一个字节的地址,称为指针。,4.,计算机中数据存取方式,A、变量的“直接访问”方式:,按变量的地址存取变量值的方式。(见下图),i,2000,3,直接访问:,编译器自动完成,3,i,2000,2000,pointer,间接访问方式示意图:,将,变量的地址,放在另一个特殊的变量中,先到另一个变量所表示的存储单元中取得变量的地址,再由变量的地址找到变量并进行数据存取(见下图)。,b.变量的“间接访问”方式,变量,pointer,为指针变量,存放的是变量i的内存地址,我们说,pointer,指向 i。,6.指针的概念:,一个变量的首地址称为该变量的指针。,用来专门存储,变量指针,的变量称为指针变量。,8.2 指针与变量,一. 指针变量的定义,1. 定义方式:,类型标识符 *指针变量名1,*指针变量名2 ;,例:float *p1; (,定义了p1为指向实型变量的指针变量),char *p2; (定义了p2为指向字符型变量的指针变量),标识符前面的“*”,表示该变量为指针 变量。但指针变量名是*后面的名字(不包括“*”)。,3.说明,2. 指针变量的,三,要素:,指针变量的,基类型,: 和其所指变量的类型一致;,指针变量的,值,:另一个变量在内存的地址;,指针变量的,名字,:符合用户标识符规则。,指针变量名=某一地址;,8.3.指针变量的赋值,方式1:,指针变量名=,方式2:,指针变量名=另一已经赋值的指针变量;,方式3:,通过标准的库函数(malloc和calloc在内存中开辟动态存储,单元),i的地址,p,i的值,i,q,i的地址,例如: int i,*p,*q;,p= /*方式1*/,q=p; /*方式2*/,示意图,说明:给指针变量赋“空”值,除了给指针变量赋地址值外,还可以给指针变量赋NULL,值。,如:p=Null;,Null是在stdio.h头文件中定义的预定义符。在使用前必须,使用预定义行:#include 。Null的代码值为0,,当执行以上赋值语句后,称p为空指针。等价于:,p=0 ; 或 p=0,注意:这时指针p不是指向地址为0的存储单元,而是一个,具有一个确定的值“空”。企图通过一个空指针去访问一,个存储单元,将会得到一个出错信息。,国家等级考试练习,1.已知 int a=3, a的地址为1001,则&a= ?,1001,2.设有定义:float x; 则以下对指针变量p进行定义且赋初值的语句中正确的是:,a) float *p=1024; b) int *p=(float)x; c) float p=&x d) float *p=&x,D,4.有以下程序段,#include ,main(),int n,*p=NULL;,*p=,scanf(“%d”,printf(“%dn”,p);,该程序试图通过P为变量n读入数据并输出,但程序有多出错误,以下语句正确的是:,a.int n,*p=NULL b.*p=&n,c.scanf(“%d”,A,8.4.对指针变量的操作,1.通过指针来引用一个存储单元,C语言提供了一个称作“间接访问运算符”(间接运算符)的单目,运算符:“*”,当指针变量有确切的地址值时,就可以通过间接,访问运算符引用该地址指向的存储单元。,如:,int *p,i=10,j;,p=,j=*p;,说明:把p所指向的存储单元(i)的值赋给j,*p代表p所指向的,变量i,以上语句等价于: j=i;,分析以下表达式的含义:,j=*(,*p=100; *p+=1;,+*p; (*p)+;,int *p,i=10,j;,p=,j=*p;,例子:例8.1,2.,算术运算(移动指针),例如,: int *p,i;,char *q , c;,p=,.,i,1000,1001,1002,2000,2001,c,p,q,.,i,1000,1001,1002,2000,2001,c,p,q,/*运算示例*/,p+;q+;,对指针进行加减运算时,数字“1”不代表十进制整数“1”,,即不是移动一个字节,而是移动一个存储单元长度。,例如:右图1,pq为,假。,.,i,1000,1001,1002,2000,2001,c,p,q,.,4000,4001,4002,4003,4018,4019,p,q,a0,a1,a9,例如:右图2,int a10;,int *p,*q;,p=*/,q=*/,求pq为真为假?,2.,比较运算,例 main(),int a,b;,int *pointer_1,*pointer_2;,a=100;b=10;,pointer_1=,pointer_2=,printf (%d,%dn,a,b);,printf(%d,%dn,*pointer_1,*pointer_2);,程序运行结果:,100,10,100,10,思考:,1.若已执行了“pointer_1=&a”,则:,“&*pointer_1”,的含意是什么?,(答:相当于&a ),2. *&a的含意是什么?,(答:a ),3. (*pointer_1)+相当于什么?,(答:a+ ),例对输入的两个整数按大小顺序输出,main(),int *p1,*p2,*p,a,b;,a=5;b=9;,p1=,&a,5,9,p1,p2,&b,a,b,(1 初始),2 执行p=p1后,&a,5,p1,a,&b,9,p2,b,&a,p,if (ay) return(,else return(,国家等级考试练习:,1.以下叙述中错误的是:,a.改变函数形参的值,不会改变对应的实参,b.函数可以返回地址值,c.可以给指针变量赋一个整数作为地址值,d.当在函数的开头中包括头文件stdio.h时,可以给变量赋NULL,C,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!