指针.pptx

上传人:b****3 文档编号:2717720 上传时间:2022-11-09 格式:PPTX 页数:20 大小:135.46KB
下载 相关 举报
指针.pptx_第1页
第1页 / 共20页
指针.pptx_第2页
第2页 / 共20页
指针.pptx_第3页
第3页 / 共20页
指针.pptx_第4页
第4页 / 共20页
指针.pptx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

指针.pptx

《指针.pptx》由会员分享,可在线阅读,更多相关《指针.pptx(20页珍藏版)》请在冰豆网上搜索。

指针.pptx

第八章第八章指针图书馆的例子:

图书馆的例子:

你去图书馆去借书,那么首先你得知道你要借的书名,到了图书馆后,告你去图书馆去借书,那么首先你得知道你要借的书名,到了图书馆后,告诉管理员要借的书名(例如:

这个书名叫诉管理员要借的书名(例如:

这个书名叫高数高数而这本书放在三楼而这本书放在三楼301号屋号屋子里)那么管理员就会去三楼子里)那么管理员就会去三楼301的屋子里把那本书拿过来给你。

(屋子的编的屋子里把那本书拿过来给你。

(屋子的编号是唯一的)(书的内容就是高数的各种题及例子等等)号是唯一的)(书的内容就是高数的各种题及例子等等)学习的学习的C中:

一个变量:

中:

一个变量:

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

这时候这个唯一的地址就和注:

这时候这个唯一的地址就和这个变量的名子绑在了一起这个变量的名子绑在了一起),而这个空间名子就叫),而这个空间名子就叫x,那么大家想一想,那么大家想一想,找到了这个地址是不是也就找到了这个变量。

找到了这个地址是不是也就找到了这个变量。

那么你在做那么你在做X=20的时候,对于的时候,对于C+工具来说,首先要找到这个变量的地址工具来说,首先要找到这个变量的地址(就好比图书管理员先要找到三楼(就好比图书管理员先要找到三楼301号屋子一样)在把号屋子一样)在把20这个值放到这个地这个值放到这个地址里去,那么这时候址里去,那么这时候X的值就变成了的值就变成了20这个值。

而对于程序员来说,你只要记这个值。

而对于程序员来说,你只要记住变量的名子是住变量的名子是X就可以了,别的工作是由就可以了,别的工作是由C+工具(管理员来完成的)。

工具(管理员来完成的)。

1、程序执行中所用的数据都存于内存中、程序执行中所用的数据都存于内存中,任何数据都有一任何数据都有一定的存储位置定的存储位置,占据一定数量的存储单元占据一定数量的存储单元.内存单元按顺序内存单元按顺序排列排列,每个单元有一个称为内存地址的编号每个单元有一个称为内存地址的编号.如同通过通信如同通过通信地址可以唯一确定居住区的每个住户一样地址可以唯一确定居住区的每个住户一样,内存中的数据也内存中的数据也可以通过内存单元的地址进行确定可以通过内存单元的地址进行确定,内存单元的地址用一个内存单元的地址用一个十六进制数表示十六进制数表示,如如fff3,ff10等等等等.对程序员而言对程序员而言,记住变量名记住变量名要比记住用十六进制表示的内存单元地址更加简便要比记住用十六进制表示的内存单元地址更加简便,所以我所以我们要给程序变量起名们要给程序变量起名,然后通过变量名来引用内存单元的数然后通过变量名来引用内存单元的数据据.(举图书馆的例子举图书馆的例子)2、直接存取、直接存取:

我们在程序中只需指出变量名我们在程序中只需指出变量名,无需知道每个无需知道每个变量在内存中的具体地址变量在内存中的具体地址,每个变量与具体地址的联系由每个变量与具体地址的联系由c编译系统来完成编译系统来完成.程序中我们对变量进行存取操作程序中我们对变量进行存取操作,实际上实际上也就是对某个地址的存储单元进行操作也就是对某个地址的存储单元进行操作.这种直接按变量的这种直接按变量的地址存取变量值的方式称为地址存取变量值的方式称为:

直接存取直接存取.369i的值J的值K的值200020042008如图:

假设程序已定义了三个整型变量如图:

假设程序已定义了三个整型变量i,j,k,编译时系统分配编译时系统分配2000至至2003四个字节给变四个字节给变量量i,2004至至2007四个字节给变量四个字节给变量j,2008到到200b四个字节给变量四个字节给变量k。

1、Printf(“%d”,i);根据变量名与地址的对根据变量名与地址的对应关系,找到变量应关系,找到变量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-200b字节单元中。

字节单元中。

指针简介2-1内存10intxED53地址变量数据ED53int*ptr_x指针如果:

ptr_x=&x,则指针ptr_x指向变量x指针也是一个变量,只不过该变量中存储指针也是一个变量,只不过该变量中存储的是另一个对象的内存地址;的是另一个对象的内存地址;如果一个变量存储另一个对象的地址,则如果一个变量存储另一个对象的地址,则称该变量指向这个对象;称该变量指向这个对象;由于指针值是数据,指针变量可以赋值,由于指针值是数据,指针变量可以赋值,所以一个指针的指向在程序执行中可以改所以一个指针的指向在程序执行中可以改变。

指针变。

指针p在执行中某时刻指向变量在执行中某时刻指向变量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*ptrnum中的中的*代代表该变量的类型为指针型变量。

表该变量的类型为指针型变量。

举例:

职业举例:

职业民族民族名子名子职业职业民族民族名子名子医生医生汉汉张三张三医生医生张三张三/民族如果不写一般来说民族如果不写一般来说教师教师汉汉李四李四教师教师李四李四都会认为是汉族。

都会认为是汉族。

学生学生苗苗赵五赵五学生学生苗苗赵五赵五那么当说介绍赵五的时候应说那么当说介绍赵五的时候应说学生赵五是苗族的,而不能说学生苗赵五。

学生赵五是苗族的,而不能说学生苗赵五。

inta;/可以说可以说a是整型变量是整型变量intb;/可以说可以说b是整型变量是整型变量floatc;/可以说可以说c是单精度变量是单精度变量int*aa;/但你不能说但你不能说*aa是指针变量是指针变量,因为在这里的,因为在这里的*代表的是代表的是aa是特殊变量,是特殊变量,或说或说aa是指针变量。

是指针变量。

与指针相关的运算符2-1intnum,*ptrnum;ptrnum=#内存100numFF7Cptrnum指针FF7C与指针相关的运算符2-2intnum,*ptrnum;ptrnum=#*ptrnum=15;内存100numFF7Cptrnum指针FF7C15例如:

例如:

intk=10;这是定义一个变量并给这个变量赋一个这是定义一个变量并给这个变量赋一个值,那么在做例如:

值,那么在做例如:

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。

显。

显然,当然,当*p出现在赋值号左边时,代表的时指针所指的存储单出现在赋值号左边时,代表的时指针所指的存储单元(即变量名),当元(即变量名),当*p出现在赋值号右边时,代表的是指针出现在赋值号右边时,代表的是指针所指的存储单元的内容(即变量的值)。

所指的存储单元的内容(即变量的值)。

int*ptrnmu1,*ptrnmu2;inta=10,b=20;ptrnmu2=&b;ptrnmu1=&a;

(2)&*ptrnum:

是什么意思?

是什么意思?

&和和*两个运算符的优先级两个运算符的优先级别相同,但按自右而左方向结合,因此,先进行别相同,但按自右而左方向结合,因此,先进行*ptrnum的运算,它就是变量的运算,它就是变量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)+注意:

在表达式注意:

在表达式+*p中,中,+和和*两个运算符两个运算符的优先级别相同,但按自右至左的方向结的优先级别相同,但按自右至左的方向结合,因此,合,因此,+*p相当于相当于+(*p),而在表达,而在表达式式(*p)+中一对括号不可少,中一对括号不可少,(*p)+表示先表示先取取p所指存储单元中的值,然后增所指存储单元中的值,然后增1个为表个为表达式的值。

不可以写成达式的值。

不可以写成*p+,否则将先计算否则将先计算*p作为表达式的值(如此时为作为表达式的值(如此时为100),然后),然后使指针变量使指针变量p本身增本身增1,所以,所以*p+并不使并不使p所所指存储单元中的值增指存储单元中的值增1而是移动了指针。

而是移动了指针。

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

%d,var);printf(nvar的内存地址是:

%x,&var);printf(n指针ptr_var的地址是:

%xn,&ptr_var);printf(nvar的值是:

%d,*ptr_var);printf(nvar的地址是:

%xn,ptr_var);内存内存varptr_v

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

当前位置:首页 > 教学研究 > 教学案例设计

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

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