1、第六章 指针主讲人:韩维良*C语言程序设计指针是 C语言的 个重要特色,是 C语言的精华所在。正是丰富的指针运算功能才使得 C语言成为目前最常用、最流行的面向过程的结构化程序设计语言。正确而灵活地运用指针,能有效地表示复杂的数据结构、方便地使用数组和字符串;可以在函数间进行数据传递;可以直接处理内存地址、动态分配内存等。熟练、灵活的使用指针,可以使程序简洁、紧凑、高效。C语言程序设计基础知识一、内存地址 内存中存储单元的编号C语言程序设计所有数据只有存放在内存中 计算机才能进行处理和运算。内存计量的基本单位是字节,它是进行分配和读取的最小单位,每个字节由 8个二进制位( bit)组成,一个字节
2、就是一个内存单元。整个内存空间是一维的, 每个字节都有一个唯一的序号,称为内存单元的地址 ,比如对一个 1Mb的内存,其内存单元的地址分别为 0, 1, 2, 3, 。C语言程序设计任何计算机程序只有存贮在内存中才能被执行。当 C程序中定义一个变量时,编译系统划分一定数目的存贮单元来存贮那个变量,存贮单元的数目由变量的类型确定,例如, int型变量分配 4个字节, float型变量分配 4个字节,对 char型变量分配 1个字节等,若变量分配的不是 1个字节,此时 以以 为为 变量分配的第一个字节的地址作为该变量存储变量分配的第一个字节的地址作为该变量存储地址地址 ,这就是内存数据的指针,编译
3、系统把这几个存贮单元与变量名联系起来。地址 存贮单元0000 一个字节0001 一个字节0002 一个字节0003 一个字节0004 一个字节 一个字节2001 999的低字节2002 999的高字节变量 a如有一个 short型变量,变量名是 a,值是 999,占用的存贮单元是 2001和 2002两个字节,则变量 a的内存地址是 2001。C语言程序设计1、内存储器中,拥有大量的存储单元(每个存储单元容量为字节)。为了方便管理,必须为每一个存储单元编号,这个编号就是存储单元的 “ 地址 ” 。每个存储单元都有一个唯一的地址。2、在地址所标识的存储单元中存放数据。注意:内存单元的地址与存放内
4、存单元中的数据是两个完全不同的概念。如同房间号码与住在房间里的人。C语言程序设计二、变量地址 系统分配给变量的内存单元的起始地址如下程序:main() int num;scanf(“%d“,printf(“num=%dn“, num);C编译程序编译到该变量定义语句时,将变量 num 登录到 “ 符号表” 中。符号表的关键属性有两个:一是 “ 标识符名( id) ” ,二是该标识符在内存空间中的 “ 地址( addr) ” 。 (如同医院床位登记表 )为描述方便,假设系统分配给变量 num的 4字节存储单元为 3000_3003,则起始地址 3000就是变量 num在内存中的地址。C语言程序设计short a,b;如上的定义,给变量 a、 b分别分配两个单元( 1个字节),变量 a的地址为 :2001,变量名与存放变量的地址之间建立一定的联系,使得通过变量名可以访问对应存贮单元中的内容。2001 a20022003 b2004C语言程序设计一定要清楚 变量的地址 与 变量的值 不是一回事 , 变量的地址 是由编译系统按一定规则进行分配的,一经分配就固定不变, 变量的值 在程序运行过程中是可以改变的,用户需要关心的 是变量的当前值,而不必关心变量的地址,即变量存储单元。当程序引用这个变量时,可通过变量名自动地访问相应的存贮单元,当然程序也可以通过该变量的地址来访问这些存贮器单元。