全国计算机等级考试实用应试教程二级C语言-第8章--指针.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 实用 应试 教程 二级 语言 指针
- 资源描述:
-
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,本章要点,:,8.1,变量的地址和指针,8.2,指针变量的定义和指针变量的基类型,8.3,给指针变量赋值,8.4,对指针变量的操作,8.5,函数之间地址值的传递,第,8,章 指针,8.1,变量的地址和指针,1,变量及其地址,在,C,的程序中要定义许多变量,用来保存程序中用到的数据,包括输入的原始数据、加工的中间结果及最终数据。,C,编译系统会根据定义中变量的类型,为其分配一定字节数的内存空间(如,字符型占,1,个字节,整型占,2,字节,实型占,4,字节,双精度型占,8,字节等,),此后这个变量的地址也就确定了。,例如有变量定义语句:,char a,int b,float c;,编译系统给变量分配的存储空间如图,8-1,所示。,图,8.1,变量分配的存储单元与地址,C,语言规定,当一个变量占用一个字节时,该字节的地址就是该变量的地址,如果变量占用连续的多个字节,那么第一个字节的地址就是该变量的地址。,变量的地址起到了寻找变量的作用,好象是一个指针指向了变量,所以常把变量的地址称为“指针”。,2,指针变量,若一个变量专用于存放另一个变量的地址(指针),则该变量称为指针变量。,指针的对象:当把变量的地址存入指针变量后,我们就可以说这个指针指向了该变量。,变量的存取方法:直接存取和间接存取。,直接存取:,直接根据变量名存取数据。,间接存取:,通过指针变量存取相应变量的数据,。,在,C,程序中,变量的地址可以通过运算符“,&”,来得到,该运算符称为,“取地址”运算符,,它的运算对象是变量或数组元素,得到的结果是变量或数组元素的地址。,例如:,int a,b10;,&a:,得到的是变量,a,的地址,&b5:,得到的是数组元素,b5,的地址,在,C,语言中,指针被广泛应用,它和数组、字符串、函数间数据的传递等有着密不可分的联系。,8.2,指针变量的定义和指针变量的基类型,1,指针变量的定义与初始化,定义指针变量的一般形式为:,类型名 *指针变量名,1,,*指针变量名,2,,,;,其功能是定义指向给定“数据类型”的变量或数组元素的指针变量,同时给该变量赋“初值”。存储类型指出该指针变量的存储类型。,定义时也可以给其赋初值,格式为:,*指针变量名,=,初值,;,例如:,int *pi,*pj=,2,指针变量的基类型,一个指针变量中存放的是一个存储单元的地址值。这里的“一”所代表的字节数是不同的:对整型而言,它代表,2,个字节;但对实型而言,它就代表,4,个字节。这即是不同基类型的含义。后面的章节中涉及到指针的移动,也就是要对地址进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。因此对于基类型不同的指针变量,其内容增,1,、减,1,所“跨越”的字节数是不同的。,8.3,给指针变量赋值,8.3.1,给指针变量赋地址值,一个指针变量可以通过以下三种方式获得一个确定的地址,从而指向一个具体的对象。,(,1,)通过求地址运算(,&,)获得地址值,一般格式为:指针变量名地址表达式,例如:,int k,*p,*q;q=,(,&,为求地址运算符),此时,变量,k,的地址赋予了,q,,也可以说,q,指向了,k,。,(,2,)通过指针变量获得地址值,可以通过赋值运算,把一个指针变量中的地址值赋给另一个指针变量,从而使这两个指针变量指向同一地址。例如,若有以上定义,则语句:,p=q;,使指针变量,p,中也存放了变量,k,的地址,也就是说指针变量,p,和,q,都指向了变量,k,。,注意:在赋值号两边指针变量的基类型必须相同。,(,3,)通过标准函数获得地址值,可以通过调用库函数,malloc,和,calloc,在内存中开辟动态存储单元,并把所开辟的动态存储单元的地址赋给指针变量。,8.3.2,给指针变量赋“空”值,除了给指针变量赋地址值外,还可以给指针变量赋,NULL,值。,例如:,p=NULL;,NULL,是在,stdio.h,头文件中的预定义符。,NULL,的代码值为,0,,当,p=NULL,时,称,p,为空指针。因为,NULL,的代码值是,0,,所以上面语句等价于:,p=0;,或,p=0;,这时,指针,p,并不是指向地址为,0,的存储单元,而是具有一个确定的值,“,空”。企图通过一个空指针去访问一个存储单元时,将会得到一个出错信息。,8.4,对指针变量的操作,8.4.1,通过指针来引用一个存储单元,1,取地址运算符(,&,)和指针运算符(*),与指针有关的运算符主要有两个,分别是“取地址运算符,(&)”,和“指针运算符,(*)”,。,(,1,),&,运算符。为取地址运算符,其作用是返回操作对象(变量或数组元素)的地址。例如,“,”,返回变量,x,的地址,“,&,a,5;”,返回的是数组元素,a,5,的地址。,(,2,)*运算符。为指针运算符,其作用是返回以操作对象的值作为地址的变量(或内存单元)的内容。,它们都是单目运算符,优先级高于所有的双目运算符,它们的结合性均是,自右向左,。在使用这两个运算符需要注意以下几点:,(,1,)如果已经执行了“,p=&a,;”语句,若有,&*p,由于“,&”,和“*”两个运算符的优先级别相同,但按自右向左方向结合,因此先运算*,p,,它就是变量,a,,再执行,&,运算。因此它等同于,&a,。,(,2,)*,&a,的含义是,a,。因为先进行,&a,运算,得到,a,的地址,再进行*运算,即,&a,所向的变量,因此*,&a,等价于,a,。,(,3,),(*p)+,相当于,a+,。注意括号是必要的,如果没有括号,就成为*,(p+),,这时使指针变量本身增,1,,并不是使,p,所指的存储单元的值增,1,。,2,通过指针引用存储单元,例如:,int *p,k=4,q;,p=,则赋值语句,q=*p;,就是把,p,所指存储单元(,k,)的内容(整数,4,)赋予变量,q,,这里的*,p,代表,p,所指向的变量,i,。因此,上面的语句等价于,q=k;,间接访问运算符必须出现在运算对象的左边,其运算对象是地址或者是存放地址的指针变量。即*号右边也可以是地址值,如,q=*(,表达式,&i,求出变量,i,的地址,以上赋值语句表示取地址,&k,中的内容赋给,q,。由于*和,&,的优先级相同,且自右向左结合,因此表达式中的括号可以省略,即,q=*,下面的语句取指针变量,p,所指向的存储单元中的内容加,1,后赋给变量,q,。,q=*p+1;,8.4.2,移动指针,移动指针就是指对指针变量进行加上或减去一个整数、或通过赋值运算,使指针变量指向相邻的存储单元。因此,只有当指针指向一串连续的存储单元时,指针的移动才有意义。,当指针指向一串连续的存储单元时,还可以和指向同一串连续存储单元的指针进行相减的运算,除此之外,不可以对指针进行任何其他的算术运算。,8.4.3,指针比较,在关系表达式中,可以对两个指针进行比较,即两个变量地址的比较。如:,p,q,是两个指针变量,,if(p*j)return i;,return j;,展开阅读全文

咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。
咨信网小贴示:
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】


全国计算机等级考试实用应试教程二级C语言-第8章--指针.ppt
















自信AI助手














微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/14760918.html