c语言课件56地址和指针的概念_第1页
c语言课件56地址和指针的概念_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、56地址和指针的概念知识内容为了说清楚什么是指针,必须弄清数据在内存中是如何存储的,又是如何读取的。如果在程序中定义了一个变量,在对程序进行编译时系统就会给这个变量分配内存单元。编译系统根据程序中定义的变量类型,分配一定长度的空间。例如,一般为整型变量分配2个字节,对单精度浮点型变量分配4个字节,对字符型变量分配一个字节。内存区的每一个字节有一个编号,这就是“地址”。在地址所标识的内存单元中存放数据。务必弄清楚一个内存单元的地址与内存单元的内容这两个概念的区别,假设程序已定义了3个整形变量i、j、k,编译时系统分配2000和2001两个字节给变量i,2002、2003字节给j,2004、200

2、5字节给k。在程序中一般是通过变量名来对内存单元进行存取操作的。其实程序经过编译后已经将变量转换为变量的地址,对变量值的存取都是通过地址进行的。假如有输出语句:printf(“%d”,i);他是这样执行的:根据变量名与地址的对应关系(这个对应关系是在编译时确定的),找到变量i的地址2000,然后从由2000开始的两个字节中取出数据(即变量的值),把它输出。假如有输入语句:scanf(“%d”,&i);在执行时,把从键盘输入的值送到地址为2000开始的整型存储单元中。如果有语句则从2000、2001字节取出i的值(3),再从2002、2003取出j的值(6),将它们相加后在将其和(9)送到k所占

3、用的2004、2005字节单元中。这种变量地址存取变量值的方式成为“直接访问”方式。还可以采用另一种称之为“间接访问”的方式,将变量i的地址存放在另一个变量中。按C语言的规定,可以在程序中定义整型变量、实型变量、字符变量等,也可以定义这样一种特殊的变量,它是存放地址的。假设我们定义了一个变量i_pointer,用来存放整型变量的地址,它被分配为3010、3011两个字节。可以通过下面语句将i的地址(2000)存放到i_pointer中。i_pointer=&i;这时,i_pointer的值就是2000,即变量i所占用单元的起始地址。要存取变量i的值,也可以采用间接方式:先找到存放“i的地址”的

4、变量i_pointer,从中取出i的地址(2000),然后到2000、2001字节取出i的值(3),见图1。 图1打个比方,为了开一个A抽屉,有两种方法,一种是将A钥匙带在身上,需要时直接找出该钥匙打开抽屉,取出所需的东西。另一种办法是:为安全起见,将改A钥匙放到另一抽屉B中锁起来。如果需要打开A抽屉,就需要先找出B钥匙,打开B抽屉,取出A钥匙,再打开A抽屉,取出A抽屉中的东西,这就是“间接访问”。如图2(a)表示直接访问,已经知道变量i的地址,根据此地址直接对变量i的存储单元进行存取访问。图2(b)表示间接访问,先找到存放变量i地址的 变量i_pointer,从其中得到变量i的地址,再找到变

5、量i的存储单元,然后对它进行存取访问。 图2为了表示将数值3送到变量中,可以有两种表达方法:将3送到变量i所标志的单元中,见图2(a)。将3送到变量i_pointer所指向的单元(即i所标志的单元中),见图2(b)。所谓指向就是通过地址来体现的。假设i_pointer中的值为2000,它是变量i的地址,这样就在i_pointer和变量i之间建立起一种联系,即通过i_pointer能知道i的地址,从而找到变量i的内存单元。图2中以箭头表示这种“指向”关系。由于通过地址能找到所需的变量单元,我们可以说,地址指向该变量单元(如同说,一个房间号“指向”某一房间一样)。因此在C语言中,将地址形象化的称为“指针”。意思是通过它能找到以它位地址的内存单元(例如根据地址2000就能找到变量i的存储单元,从而读取其中的值)。一个变量的地址称为该变量的“指针”。例如,地址2000是变量i的指针。如果有一个变量专门用来存放另一个变量的地址(即指针),则它称为“指针变量”。上述的i_pointer就是一个指针变量。指针变量的值(即指针变量中存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论