及理字优 厦门理工学院高级语言程序设计敏学课件 XIAMEN UNIVERSITY OF TECHNOLOGY 第7章指针 教师:吴芸 E-Mail:you@xmut.edu.cn 厦门理工学院计算机科学与技术系 2021/2/24 XMUT 2008
XMUT 2008 厦门理工学院高级语言程序设计教学课件 第7章 指针 厦门理工学院计算机科学与技术系 2021/2/24 教 师: 吴 芸 E-Mail: ywu@xmut.edu.cn
7.0目标 口理解指针的概念 口定义指针变量 口掌握对指针的操作 口理解指针和数组的关系 及 XIAMEN UNIVERSITY OF TECHNOLOGY 2008 20: 52
2008 20:52 2 7.0 目标 ❑理解指针的概念 ❑定义指针变量 ❑掌握对指针的操作 ❑理解指针和数组的关系
7.1指针的基本概念 1、内存地址—內存中存储单元的编号 存储地址 存储 单元 601 Q2000 2001 注意:内存单元的地址与内存单元中的数据是 4两个完全不同的概念。 大小G节单 301 302 2004 元、字单元 存储0 202 数据 ●● 101 教室号码 教室 教室有容》鬥理上字 AMEN UNIVERSITY OF TECHNOLOCY 2008 20: 52
2008 20:52 3 …... 内存 2000 2001 2002 2005 0 2003 2004 …... …... …... 7.1 指针的基本概念 1、内存地址──内存中存储单元的编号 101 102 201 202 301 302 401 402 501 502 601 602 教学楼 教室号码 存储地址 教室 存储 单元 教室有容 量 存储单元有 大小(字节单 元、字单元) 50 存储 数据 注意:内存单元的地址与内存单元中的数据是 两个完全不同的概念
2、变量地址—系统分配给变量的内存单元的起始地址 内存中每个字节有一个编号--地址 内存 i的地 址 程序中:inti; 2000 float ks 2001 2002) 编译或函数调用时为其分配内存单完 2003 k 变量是对程序中教据 k的 地址2005 存储血间的抽家 注意:在TC或BC下,系统将给变 量设配2字节的单元,而ⅴC下将是 4字节的单元! 52
2008 20:52 4 内存…... …... 0 2000 2001 2002 2005 2003 2004 …... …... 2、变量地址──系统分配给变量的内存单元的起始地址 程序中: int i; float k; 内存中每个字节有一个编号-----地址 i k 编译或函数调用时为其分配内存单元 变量是对程序中数据 存储空间的抽象 i的地 址 k的 地址 注意:在TC或BC下,系统将给变 量i分配2字节的单元,而VC下将是 4字节的单元!
00000000H 变量a 00000001H 600002 个程序片段 变量b 00000003H main 00000004H 00000005H int a=1: 00000006H float b=2 00000007H 5/+数组 intc2]={5,6}; 00000008H char d='d 00000009H 一数组c[1 0000000A ←一变量d 00000009H 及门 理 XIAMEN UNIVERSITY OF TECHNOLOGY 2008 20: 52
2008 20:52 5 main( ) { int a=1; float b=2; int c[2]={5, 6}; char d=’d’; } 一个程序片段 变量 a 变量 b 变量 d 5 数组c[0] 00000000H 00000001H 00000002H 00000003H 00000004H 00000005H 1 00000006H 00000007H 00000008H 00000009H …... 6 0000000AH 00000009H ‘d’ 2 数组c[1]
变量的 地址 存放 变量 00000000H 的内 存单 00000001H int a 变量的值(a=1) 变量名 局部变量a的存储示意图 注:变量的地址是二进制的,为了便于书写 而在这里写成对应的十六进制形式。 及 XIAMEN UNIVERSITY OF TECHNOLOGY 2008 20: 52
2008 20:52 6 变量名 变 量 的 地址 存 放 变 量 的 内 存 单 元 00000000H 00000001H 1 变量的值(a=1) 局部变量a的存储示意图 注:变量的地址是二进制的,为了便于书写 而在这里写成对应的十六进制形式。 int a
要访问变量首先就要知道变量的地址,可是通 过数字形式的地址值访问变量,显然是不方便的 (正如使用URL网址、域名比I地址要方便): 不便于书写和记忆,而且数字本身没有 什么具体的字面意义。 需要了解硬件细节。比如当前哪些内存 空间是空闲的等等。 失去了高级语言容易使用、接近人类语言的优点。 解决的办法: C语言提供了变量名,程序员通过变量名来访问 变量 及 XIAMEN UNIVERSITY OF TECHNOLOGY 2008 20: 52
2008 20:52 7 要访问变量首先就要知道变量的地址,可是通 过数字形式的地址值访问变量,显然是不方便的 (正如使用URL网址、域名比IP地址要方便): ➢不便于书写和记忆,而且数字本身没有 什么具体的字面意义。 ➢需要了解硬件细节。比如当前哪些内存 空间是空闲的等等。 失去了高级语言容易使用、接近人类语言的优点。 解决的办法: C语言提供了变量名,程序员通过变量名来访问 变量
7.1,2指针 “指针就是地址” ●地址值(也就是内存单元的编址)。 ●是什么类型的数据的地址。(这就存在 着一个跨度也就是存储空间大小的问题)。 及 XIAMEN UNIVERSITY OF TECHNOLOGY 2008 20: 52
2008 20:52 8 “指针就是地址”!!! ⚫地址值(也就是内存单元的编址)。 ⚫是什么类型的数据的地址。(这就存在 着一个跨度也就是存储空间大小的问题)。 7.1.2 指针
7.1.3指针其名 明白指针就是地址,这一点十分重要。 多数情况下,这个地址是指内存中一个变量 的起始位置。 如果一个变量包含了另一个变量的地址,那 么第1个变量就是个指针变量,而且说它是“指向” 第2个变量的,“指针”由此而得其名。 例如,如果在地址为1000的变量指向地址为 1004的变量,那么也就是说地址为1000的这个变 量的值是1004。 及 XIAMEN UNIVERSITY OF TECHNOLOGY 2008 20: 52
2008 20:52 9 明白指针就是地址,这一点十分重要。 多数情况下,这个地址是指内存中一个变量 的起始位置。 如果一个变量包含了另一个变量的地址,那 么第1个变量就是个指针变量,而且说它是“指向” 第2个变量的,“指针”由此而得其名。 例如,如果在地址为1000的变量指向地址为 1004的变量,那么也就是说地址为1000的这个变 量的值是1004。 7.1.3 指针其名
7.1指针的基本概念 为什么要表达为“指向”呢?下一节中将会 看到如果变量p的值是变量a的地址,则可以利用 变量p来访问和操作变量a(其实这是很自然的事 情,有了某变量的地址当然就可以访问该变量)。 所以这样的变量p和a之间是有某种联系的,这种 联系就被表达为“指向”。 图7-3解释了这一点,它仅仅用来对地址进 行偏移。 10 及 XIAMEN UNIVERSITY OF TECHNOLOGY 2008 20: 52
2008 20:52 10 为什么要表达为“指向”呢?下一节中将会 看到如果变量p的值是变量a的地址,则可以利用 变量p来访问和操作变量a(其实这是很自然的事 情,有了某变量的地址当然就可以访问该变量)。 所以这样的变量p和a之间是有某种联系的,这种 联系就被表达为“指向”。 图7-3解释了这一点,它仅仅用来对地址进 行偏移。 7.1 指针的基本概念