高级程序设计语言 吴凡 TEL:83202682 E-mail:cdwf@tom.com
高级程序设计语言 吴 凡 TEL: 83202682 E-mail: cdwf@tom.com
第十章指针 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 第十章 指针
引例 甲到旅馆投宿,住在6028号房间,在服务处登记了 房间 乙、丙两人来访问甲。假设甲事先通知了 乙自己的房间号,但没有通知丙。 问题:乙、丙如何找到甲 乙知道甲的房间号,可以直接到6028号房间访问甲—一直 接访问 丙先在服务处查询到甲的房间号为6028,再到6028号房 间访问甲—间接访问 6028 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 6028 引例 ⚫ 甲到旅馆投宿,住在6028号房间,在服务处登记了 房间号。乙、丙两人来访问甲。假设甲事先通知了 乙自己的房间号,但没有通知丙。 ⚫ 问题:乙、丙如何找到甲 ⚫ 乙知道甲的房间号,可以直接到6028号房间访问甲——直 接访问 ⚫ 丙先在服务处查询到甲的房间号为6028,再到6028号房 间访问甲——间接访问
内存空间与内存地址 内存(即内部存储器),由存储单元(单 位字节,Bye)组成。特点是:存储单元 是线性并连续的。 变量内容 char c A 地址 100101102103104105106107108109110110 变量地址 如何访问存储单元? ●系统给内存单元编号一—内存地址,通过地址 可以访问对应的存储单元 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 ⚫ 内存(即内部存储器),由存储单元(单 位字节,Byte)组成。特点是:存储单元 是线性并连续的。 ⚫ 如何访问存储单元? ⚫ 系统给内存单元编号——内存地址,通过地址 可以访问对应的存储单元 内存空间与内存地址 A ... ... 地址 100 101 102 103 104 105 106 107 108 109 110 110 char c 变量内容 变量地址
变量与变量地址 ●变量的地址:系统为变量分配的内存单元 的地址(首地址) 变量地址是一个无符号的整型数 char c int i float f 变量首址地址存 变量 a 少&c产9025 han 10 少岳 80A6 f=2.01; 10 in七 80A8 2.01 £1oatf 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 ⚫ 变量的地址:系统为变量分配的内存单元 的地址(首地址) ⚫ 变量地址是一个无符号的整型数 变量与变量地址 变量首址 地址 内存 变量 char c; int i; float f; c = 'a'; i = 10; f = 2.01; &c = 80A5 char c 80A6 int i &i = 80A8 float f &f = a 10 2.01
变量特性 ●存储空间的位置:内存首地址——变量名 存储空间的大小:数据类型—变量类型 ●存储的内容:数据值——变量值 生存周期:存储类别 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 变量特性 ⚫ 存储空间的位置:内存首地址——变量名 ⚫ 存储空间的大小:数据类型——变量类型 ⚫ 存储的内容:数据值——变量值 ⚫ 生存周期:存储类别
变量的访问方式 ●直接访问:直接通过变量的地址(变量名) 来操作对应的内存单元 ●变量名在编译时会被绑定到相应的地址 ●间接访问:将变量n的地址存放在另一个变 量p中,要访问变量n,可以通过首先访问 变量p,从中获得变量n的地址,再根据地 址访问变量n 803A 803E 2.12 803A 变量n变量c变量p 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 变量的访问方式 ⚫ 直接访问:直接通过变量的地址(变量名) 来操作对应的内存单元 ⚫ 变量名在编译时会被绑定到相应的地址 ⚫ 间接访问:将变量n的地址存放在另一个变 量p中,要访问变量n,可以通过首先访问 变量p,从中获得变量n的地址,再根据地 址访问变量n 2.12 z 803A ... 803A 变量n 变量p 803E 变量c
间接访问 ●关键问题: 如何定义P? 指针变量P中存放 ●如何获得变量n的地址? 着变量n的首地址 (803A)—指针 如何通过p访问n? 变量p指向变量n 变量地址又被称为变量的“指针” ●存放变量地址的变量——一指针变量 ●例:指针变量 803A 803E 2.12 803A 变量n变量c变量p 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 间接访问 ⚫ 关键问题: ⚫ 如何定义P? ⚫ 如何获得变量n的地址? ⚫ 如何通过p访问n? ⚫ 变量地址又被称为变量的“指针” ⚫ 存放变量地址的变量——指针变量 ⚫ 例:指针变量 2.12 z 803A ... 803A 变量n 变量p 803E 变量c 指针变量P中存放 着变量n的首地址 (803A)——指针 变量p指向变量n
指针变量的定义和引用 ●指针变量定义格式: 类型说明*指针变量名; 指针说明符,说明定义的变量是一个指向某种类型变 量的指针 类型说明:又称为指针变量的基类型,表明指针指向的变 量的数据类型(指针变量所内存放的是哪种类型变量的地 intp;/变量p是一个指向整型变量的指针变量* ●char*ps;/变量ps是一个指针变量,它存放的是字符型变 量的地址* ● float *pf;/变量pf是一个指向浮点型变量的指针变量* 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 指针变量的定义和引用 ⚫ 指针变量定义格式: 类型说明 *指针变量名; ⚫ *:指针说明符,说明定义的变量是 一个指向某种类型变 量的指针 ⚫ 类型说明:又称为指针变量的基类型,表明指针指向的变 量的数据类型(指针变量所内存放的是哪种类型变量的地 址) ⚫ 例: ⚫ int *p; /*变量p是一个指向整型变量的指针变量*/ ⚫ char *ps; /*变量ps是一个指针变量,它存放的是字符型变 量的地址*/ ⚫ float *pf; /*变量pf是一个指向浮点型变量的指针变量*/
指针变量的定义和引用 ●指针变量赋值 指针变量的值是一个无符号整型值,但不能将整 型常量直接赋值给指针变量 ●赋值方法1:用变量的地址给指针变量赋值 ●变量的地址如何获得?—取值符号& ●变量的类型要与指针变量的类型一致 ●赋值方法2:相同类型的指针变量间可以赋值 例 int a,bi int *p p=&a;/*方法1*/ q=p;/*方法2*/ 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 指针变量的定义和引用 ⚫ 指针变量赋值 ⚫ 指针变量的值是一个无符号整型值,但不能将整 型常量直接赋值给指针变量 ⚫ 赋值方法1:用变量的地址给指针变量赋值 ⚫ 变量的地址如何获得?——取值符号& ⚫ 变量的类型要与指针变量的类型一致 ⚫ 赋值方法2:相同类型的指针变量间可以赋值 ⚫ 例: int a,b; int *p, *q; p = &a; /*方法1*/ q = p; /*方法2*/