ImageVerifierCode 换一换
你正在下载:

指针.pptx

[预览]
格式:PPTX , 页数:20 ,大小:135.46KB ,
资源ID:2717720      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2717720.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(指针.pptx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

指针.pptx

1、第八章第八章指 针图书馆的例子:图书馆的例子:你去图书馆去借书,那么首先你得知道你要借的书名,到了图书馆后,告你去图书馆去借书,那么首先你得知道你要借的书名,到了图书馆后,告诉管理员要借的书名(例如:这个书名叫诉管理员要借的书名(例如:这个书名叫高数高数而这本书放在三楼而这本书放在三楼301号屋号屋子里)那么管理员就会去三楼子里)那么管理员就会去三楼301的屋子里把那本书拿过来给你。(屋子的编的屋子里把那本书拿过来给你。(屋子的编号是唯一的)(书的内容就是高数的各种题及例子等等)号是唯一的)(书的内容就是高数的各种题及例子等等)学习的学习的C中:一个变量:中:一个变量:x=10;那么变量的名子

2、就好比是图书的名子一那么变量的名子就好比是图书的名子一样(只不过这个书名是由你定义的,而这个书里的内容就是一个十进制的值样(只不过这个书名是由你定义的,而这个书里的内容就是一个十进制的值10),而我们用的),而我们用的C+工具就好比是图书管理员,那么每次大家在用到工具就好比是图书管理员,那么每次大家在用到X这个这个变量的时候,比如说变量的时候,比如说int x;这个操作,那么这个操作,那么C+这个工具就会在内存(图书馆这个工具就会在内存(图书馆里)开辟一块空间(并给一个唯一的地址,里)开辟一块空间(并给一个唯一的地址,注:这时候这个唯一的地址就和注:这时候这个唯一的地址就和这个变量的名子绑在了

3、一起这个变量的名子绑在了一起),而这个空间名子就叫),而这个空间名子就叫x,那么大家想一想,那么大家想一想,找到了这个地址是不是也就找到了这个变量。找到了这个地址是不是也就找到了这个变量。那么你在做那么你在做X=20的时候,对于的时候,对于C+工具来说,首先要找到这个变量的地址工具来说,首先要找到这个变量的地址(就好比图书管理员先要找到三楼(就好比图书管理员先要找到三楼301号屋子一样)在把号屋子一样)在把20这个值放到这个地这个值放到这个地址里去,那么这时候址里去,那么这时候X的值就变成了的值就变成了20这个值。而对于程序员来说,你只要记这个值。而对于程序员来说,你只要记住变量的名子是住变量

4、的名子是X就可以了,别的工作是由就可以了,别的工作是由C+工具(管理员来完成的)。工具(管理员来完成的)。1、程序执行中所用的数据都存于内存中、程序执行中所用的数据都存于内存中,任何数据都有一任何数据都有一定的存储位置定的存储位置,占据一定数量的存储单元占据一定数量的存储单元.内存单元按顺序内存单元按顺序排列排列,每个单元有一个称为内存地址的编号每个单元有一个称为内存地址的编号.如同通过通信如同通过通信地址可以唯一确定居住区的每个住户一样地址可以唯一确定居住区的每个住户一样,内存中的数据也内存中的数据也可以通过内存单元的地址进行确定可以通过内存单元的地址进行确定,内存单元的地址用一个内存单元的

5、地址用一个十六进制数表示十六进制数表示,如如fff3,ff10等等等等.对程序员而言对程序员而言,记住变量名记住变量名要比记住用十六进制表示的内存单元地址更加简便要比记住用十六进制表示的内存单元地址更加简便,所以我所以我们要给程序变量起名们要给程序变量起名,然后通过变量名来引用内存单元的数然后通过变量名来引用内存单元的数据据.(举图书馆的例子举图书馆的例子)2、直接存取、直接存取:我们在程序中只需指出变量名我们在程序中只需指出变量名,无需知道每个无需知道每个变量在内存中的具体地址变量在内存中的具体地址,每个变量与具体地址的联系由每个变量与具体地址的联系由c 编译系统来完成编译系统来完成.程序中

6、我们对变量进行存取操作程序中我们对变量进行存取操作,实际上实际上也就是对某个地址的存储单元进行操作也就是对某个地址的存储单元进行操作.这种直接按变量的这种直接按变量的地址存取变量值的方式称为地址存取变量值的方式称为:直接存取直接存取.369i的值J的值K的值200020042008如图:假设程序已定义了三个整型变量如图:假设程序已定义了三个整型变量i,j,k,编译时系统分配编译时系统分配2000至至2003四个字节给变四个字节给变量量i,2004至至2007四个字节给变量四个字节给变量j,2008到到200b四个字节给变量四个字节给变量k。1、Printf(“%d”,i);根据变量名与地址的对

7、根据变量名与地址的对应关系,找到变量应关系,找到变量i的地址的地址2000,然后,从由然后,从由2000开始的开始的4个字节中取出数据(即变量的个字节中取出数据(即变量的值值3)2、输入时如果用、输入时如果用scanf(“%d”,&i);在执行时,在执行时,就把从键盘输入的值送到地址为就把从键盘输入的值送到地址为2000开始开始的整型存储单元中。的整型存储单元中。3、如果有语句、如果有语句k=i+j;则从则从2000-2003字节字节取出取出i的值的值3,再从,再从2004-2007字节取出字节取出j的的值值6,将它们相加后再将其和,将它们相加后再将其和9送到送到k所占用所占用2008-200

8、b字节单元中。字节单元中。指针简介 2-1内存10int xED53地址变量数据ED53int*ptr_x指针如果:ptr_x=&x,则指针 ptr_x 指向变量 x指针也是一个变量,只不过该变量中存储指针也是一个变量,只不过该变量中存储的是另一个对象的内存地址;的是另一个对象的内存地址;如果一个变量存储另一个对象的地址,则如果一个变量存储另一个对象的地址,则称该变量指向这个对象;称该变量指向这个对象;由于指针值是数据,指针变量可以赋值,由于指针值是数据,指针变量可以赋值,所以一个指针的指向在程序执行中可以改所以一个指针的指向在程序执行中可以改变。指针变。指针p 在执行中某时刻指向变量在执行中

9、某时刻指向变量x,在,在另一时刻也可以指向变量另一时刻也可以指向变量y。指针简介 2-2声明并初始化指针变量数据类型*指针名;int*ptrnum;char*ptralpha;float*rate_ptr;double*p,*q;值为NULL的指针称为空指针,这意味着,指针并不指向任何地址。在头文件 stdio.h 中,NULL 定义为常量。请牢记变量中只能存放地址(指针),不要将一个变量(或任何其他非地址类型的数据)赋给一个指针变量 ptrnum=100;ptrnum=NULL;注意:指针变量的名子是注意:指针变量的名子是ptrnum,而不是,而不是*ptrnum,其中,其中 int*ptr

10、num 中的中的*代代表该变量的类型为指针型变量。表该变量的类型为指针型变量。举例:职业举例:职业 民族民族 名子名子 职业职业 民族民族 名子名子 医生医生 汉汉 张三张三 医生医生 张三张三 /民族如果不写一般来说民族如果不写一般来说 教师教师 汉汉 李四李四 教师教师 李四李四 都会认为是汉族。都会认为是汉族。学生学生 苗苗 赵五赵五 学生学生 苗苗 赵五赵五 那么当说介绍赵五的时候应说那么当说介绍赵五的时候应说 学生赵五是苗族的,而不能说学生苗赵五。学生赵五是苗族的,而不能说学生苗赵五。int a;/可以说可以说a是整型变量是整型变量int b;/可以说可以说b是整型变量是整型变量fl

11、oat c;/可以说可以说c是单精度变量是单精度变量int*aa;/但你不能说但你不能说*aa是指针变量是指针变量,因为在这里的,因为在这里的*代表的是代表的是aa是特殊变量,是特殊变量,或说或说aa是指针变量。是指针变量。与指针相关的运算符2-1int num,*ptrnum;ptrnum=#内存100numFF7Cptrnum指针FF7C与指针相关的运算符2-2int num,*ptrnum;ptrnum=#*ptrnum=15;内存100numFF7Cptrnum指针FF7C15 例如:例如:int k=10;这是定义一个变量并给这个变量赋一个这是定义一个变量并给这个变量

12、赋一个值,那么在做例如:值,那么在做例如:k=20;这时候这时候k在在=的左侧,大家想到的的左侧,大家想到的是变量的名子,而不是值是变量的名子,而不是值10,而当,而当p=k+10的时候,的时候,k在在=的的右侧,大家想到的是右侧,大家想到的是k的值的值10,而不是想到的是而不是想到的是k这个变量的名这个变量的名子。子。(1)int*p,k=0;p=&k;*p=100;/等价于等价于k=100;*p=*p+1;/取指针变量取指针变量p所指存储单元中的值,加所指存储单元中的值,加1后再放入后再放入p所指的存储单元中,即使得变量所指的存储单元中,即使得变量k中的值增中的值增1而为而为101。显。显

13、然,当然,当*p出现在赋值号左边时,代表的时指针所指的存储单出现在赋值号左边时,代表的时指针所指的存储单元(即变量名),当元(即变量名),当*p出现在赋值号右边时,代表的是指针出现在赋值号右边时,代表的是指针所指的存储单元的内容(即变量的值)。所指的存储单元的内容(即变量的值)。int*ptrnmu1,*ptrnmu2;int a=10,b=20;ptrnmu2=&b;ptrnmu1=&a;(2)&*ptrnum:是什么意思?是什么意思?&和和*两个运算符的优先级两个运算符的优先级别相同,但按自右而左方向结合,因此,先进行别相同,但按自右而左方向结合,因此,先进行*ptrnum的运算,它就是变

14、量的运算,它就是变量a,再执行,再执行&运算,因运算,因此,此,&*ptrnum与与&a相同,即变量相同,即变量a的地址。的地址。ptrnmu1=&*ptrnmu2 和和 ptrnmu1=&b的作用是一的作用是一样的。样的。(3)*&a的含义是什么?先进行的含义是什么?先进行&a运算,得运算,得a的地址,再的地址,再进行进行*运算,即运算,即&a所指向的变量,所指向的变量,*&a和和*ptrnmu1的的作用是一样的作用是一样的:b=*&a;和和b=*ptrnmu1 的作用是一样的。的作用是一样的。*p=*p+1;以上语句可写成:以上语句可写成:*p+=1;或或+*p 或或(*p)+注意:在表达

15、式注意:在表达式+*p中,中,+和和*两个运算符两个运算符的优先级别相同,但按自右至左的方向结的优先级别相同,但按自右至左的方向结合,因此,合,因此,+*p相当于相当于+(*p),而在表达,而在表达式式(*p)+中一对括号不可少,中一对括号不可少,(*p)+表示先表示先取取p所指存储单元中的值,然后增所指存储单元中的值,然后增1个为表个为表达式的值。不可以写成达式的值。不可以写成*p+,否则将先计算否则将先计算*p作为表达式的值(如此时为作为表达式的值(如此时为100),然后),然后使指针变量使指针变量p本身增本身增1,所以,所以*p+并不使并不使p所所指存储单元中的值增指存储单元中的值增1而

16、是移动了指针。而是移动了指针。指针的特点指针变量的命名规则和其他变量的命名规指针变量的命名规则和其他变量的命名规则一样则一样指针不能与现有变量同名指针不能与现有变量同名 指针可存放指针可存放 C 语言中的任何基本数据类型、语言中的任何基本数据类型、数组和其他所有高级数据结构的地址数组和其他所有高级数据结构的地址若指针已声明为指向某种类型数据的地址,若指针已声明为指向某种类型数据的地址,则它不能用于存储其他类型数据的地址则它不能用于存储其他类型数据的地址应为指针指定一个地址后,才能在语句中应为指针指定一个地址后,才能在语句中使用指针使用指针指针使用示例1#include void main()int var=10;int *ptr_var;ptr_var=&var;printf(var 的值是:%d,var);printf(n var 的内存地址是:%x,&var);printf(n 指针 ptr_var 的地址是:%xn,&ptr_var);printf(n var 的值是:%d,*ptr_var);printf(n var 的地址是:%xn,ptr_var);内存内存varptr_v

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1