内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第七章 指针(一)

内蒙古科技大学 教 案 课程名称:C语言程序设计 编写时间:2014年2月16日 授课章节 第七章指针(一) 目的要求 了解指针的概念及间接访问,掌握指针的定义及引用 重点难点 指针的间接访问及运算 教学内容 一、 指针的概念 1概念 计算机为了管理内存,需要对存储单元进行编号(以字节为单位),这个编号统称为 “地址”,又称为指针。每个变量都有一个对应的地址。不同数据类型的变量,占用的字 节数不同系统把变量占据存储单元的第 个字节的地址作为该变量的地址。若程序中分 别定义了两个整型变量i、j, 个双精度实型变量x,且分别为其赋值为5、10和3.5, 经编译连接后系统为其分配的地址(假设)为2004、2008和2012,其内容和地址关系如 下图所示。 内存用户数据区 2000 2004 5 2008 10 j 2012 3.5 2020 在引用变量时,直接引用变量的值,也就是所对应的存储单元的内容,而指针则是变 量的地址。存储单元的内容和地址是存储单元的两个相对独立的属性。尽管二者之间存在 着一些联系,但毕竟是两个概念,不可混淆
内 蒙 古 科 技 大 学 教 案 课程名称: C 语言程序设计 编写时间:2014 年 2 月 16 日 授课章节 第七章 指针(一) 目的要求 了解指针的概念及间接访问,掌握指针的定义及引用 重点难点 指针的间接访问及运算 教学内容 一、 指针的概念 1 概念 计算机为了管理内存,需要对存储单元进行编号(以字节为单位),这个编号统称为 “地址”,又称为指针。每个变量都有一个对应的地址。不同数据类型的变量,占用的字 节数不同,系统把变量占据存储单元的第一个字节的地址作为该变量的地址。若程序中分 别定义了两个整型变量 i、j,一个双精度实型变量 x,且分别为其赋值为 5、10 和 3.5, 经编译连接后系统为其分配的地址(假设)为 2004、2008 和 2012,其内容和地址关系如 下图所示。 在引用变量时,直接引用变量的值,也就是所对应的存储单元的内容,而指针则是变 量的地址。存储单元的内容和地址是存储单元的两个相对独立的属性。尽管二者之间存在 着一些联系,但毕竟是两个概念,不可混淆。 内存用户数据区 2000 2004 2008 2012 2020 i j x 10 3.5 5

2指针变量的定义、引用 在C语言中还可以定义一种专门用来存放存储单元地址的变量,称为指针变量。指针 变量的定义的格式为: 基类型 *指针变量名 基类型是用来说明定义的指针要指向的变量类型。“*”号,说明所定义的变量是指 针变量。指针变量赋值前,所指向的存储单元是不定的,当赋值后指针变量才具体指向某 一变量。例如在程序中有如下定义: int a,b,c,p 测则策统将会为各变量分配相应的存储单元。如下图。 变量 b p 罗设地址 1000100410081012 当执行下列语句: a=10: h=20 c=100 p=&a: 则不同变量所对应的存储单元中的内容如下图。 变量 a 内容 10201001000☐ 假设地址 1000100410081012 对于指针变量p来说,保存的是存储单元的地址。当将变量a的地址赋给指针变量p 时,则指针变量p中保存的是变量a的地址,即1000。 在为指针变量赋值时 ,要注意以下几点: ()指针变量的基类型与所指向的变量数据类型必须相同,否则编译时将出现警告错 误,而且程序也无法得到正确结果。 (②)基类型相同的指针之间可以相互赋值,而不同基类型的指针之间进行相互赋值出 现的错误与1)相同。 (3)尽管地址是无符号整数,但只有整型数据0可以为指针变量赋值,指针变量的值 冷:持不不指位任存储竿元·也称指针指阿空,将其它整型致猪质佰给指针变量,是☑ 3指针的运算 指针变量和其它变量一样,也可以进行运算。由于指针的运算实际上是地址的运算 所以和其它变量的运算又有区别。 ()间接访问 尽管指针变量中保存的是存储单元的地址,而引入指针的目的还是为了更方便地访问 存储单元的内容。用变量名对其所对应的存储单元的内容进行读写称为直接访问,而通过 存储单元的地址对其内容进行读写的则称为间接访问。间接访问是在引用的指针变量前面 加一个“*”号,用来表示指针所指向的存储单元的值或内容。例如: int a=5,*p:
2 指针变量的定义、引用 在 C 语言中还可以定义一种专门用来存放存储单元地址的变量,称为指针变量。指针 变量的定义的格式为: 基类型 *指针变量名 基类型是用来说明定义的指针要指向的变量类型。 “*”号,说明所定义的变量是指 针变量。指针变量赋值前,所指向的存储单元是不定的,当赋值后指针变量才具体指向某 一变量。例如在程序中有如下定义: int a,b,c, *p; p=&a; 则系统将会为各变量分配相应的存储单元。如下图。 变量 a b c p 假设地址 1000 1004 1008 1012 当执行下列语句: a=10; b=20; c=100; p=&a; 则不同变量所对应的存储单元中的内容如下图。 变量 a b c p 内容 假设地址 1000 1004 1008 1012 对于指针变量 p 来说,保存的是存储单元的地址。当将变量 a 的地址赋给指针变量 p 时,则指针变量 p 中保存的是变量 a 的地址,即 1000。 在为指针变量赋值时,要注意以下几点: ⑴ 指针变量的基类型与所指向的变量数据类型必须相同,否则编译时将出现警告错 误,而且程序也无法得到正确结果。 ⑵ 基类型相同的指针之间可以相互赋值,而不同基类型的指针之间进行相互赋值出 现的错误与⑴相同。 ⑶ 尽管地址是无符号整数,但只有整型数据 0 可以为指针变量赋值,指针变量的值 为 0 表示不指向任何存储单元,也称指针指向空。将其它整型数据赋值给指针变量,是不 合法的。 3 指针的运算 指针变量和其它变量一样,也可以进行运算。由于指针的运算实际上是地址的运算, 所以和其它变量的运算又有区别。 ⑴ 间接访问 尽管指针变量中保存的是存储单元的地址,而引入指针的目的还是为了更方便地访问 存储单元的内容。用变量名对其所对应的存储单元的内容进行读写称为直接访问,而通过 存储单元的地址对其内容进行读写的则称为间接访问。间接访问是在引用的指针变量前面 加一个“*”号,用来表示指针所指向的存储单元的值或内容。例如: int a=5, *p; 10 20 100 1000

p=a: printf("%d”,p): 当指针p指向a后,若用指针p访问所指存储单元的内容时,可以写成和,也就是说 在 个运算符优先级别相同,且结合方向均为 所以是的子注意分定文巧物 (②)指针变量加或减一个整型量,从而得到另一个地址,当然自增自减运算也是合法 的。例如当指针变量p指向一个一维数组的首地址,则p+n表示的是下标为n的元素地址。 指针变量乘除一个整型量无意义。 (3)由于指针变量中的地址也是一数值,所以指针变量间也可以进行关系运算。 ④两个类型相同的指针变量可以相减,例如指向同一数组的指针变量相减可以得到 两个指针间元素的个数。相加或相乘则无意义。 由于+与*优先级相同,且均为自右至左结合,所以当用间接访问形式使得所指变量 自加或自减时,应使用括号。例如:指针变量D已指向变量a,用间接访问形式使得变量 a自加1,应写为(和)+,即等价于a+,但不能写成p+,p+是后面要介绍的 种指 针运算,所以必须要分开。 例输入a和b两个整数,按从小到大的顺序输出。 main() *知,a,b: pl=a:p2=&b: if(a>b) 指针变 p=pl:pl=p2:p2=p: printf("\n a=%d,b=%d",a,b) printf("\n min=%d,max=%d",*pl,*p2) 可使用 间接访 程序运行时若输入:3020 运行程序:z2l.g 由于输入后a>b,所以pl与p2交换。交换前后的情况分别见下图。 p2 b p2 b 一→ 6 改写程序,交换存储单元的内容。保存存储单元内容的变量不应设为指针。 由于temp未具体指向变量,地址是随机的,对*temp的赋值则是非常危险的。当tem 所指向的存储单元为空闲的,程序能够运行且可以得到正确结果:而当tp指向系统所 占用的存储单元时,则可能造成系统崩溃
p=&a; printf("%d",*p); 当指针 p 指向 a 后,若用指针 p 访问所指存储单元的内容时,可以写成*p,也就是说 在这里*p 与 a 是等价的。由于“&”与“*”两个运算符优先级别相同,且结合方向均为 自右至左,所以有*&a=*p,&*p=&a。注意分辨定义与引用中的区别。 ⑵ 指针变量加或减一个整型量,从而得到另一个地址,当然自增自减运算也是合法 的。例如当指针变量 p 指向一个一维数组的首地址,则 p+n 表示的是下标为 n 的元素地址。 指针变量乘除一个整型量无意义。 ⑶ 由于指针变量中的地址也是一数值,所以指针变量间也可以进行关系运算。 ⑷ 两个类型相同的指针变量可以相减,例如指向同一数组的指针变量相减可以得到 两个指针间元素的个数。相加或相乘则无意义。 由于++与*优先级相同,且均为自右至左结合,所以当用间接访问形式使得所指变量 自加或自减时,应使用括号。例如:指针变量 p 已指向变量 a,用间接访问形式使得变量 a 自加 1,应写为(*p)++,即等价于 a++,但不能写成*p++,*p++是后面要介绍的一种指 针运算,所以必须要分开。 例 输入 a 和 b 两个整数,按从小到大的顺序输出。 main() { int *p1, *p2, *p,a,b; scanf("%d%d",&a,&b); p1=&a;p2=&b; if(a>b) { p=p1;p1=p2;p2=p; } printf("\n a=%d,b=%d",a,b); printf("\n min=%d,max=%d",*p1, *p2); } 程序运行时若输入: 30 20 运行程序:zz1.c 由于输入后 a>b,所以 p1 与 p2 交换。交换前后的情况分别见下图。 p1 p2 a b &b &a 30 20 p1 p2 a b &a &b 30 20 (a) (b) 改写程序,交换存储单元的内容。保存存储单元内容的变量不应设为指针。 由于 temp 未具体指向变量,地址是随机的,对*temp 的赋值则是非常危险的。当 temp 所指向的存储单元为空闲的,程序能够运行且可以得到正确结果;而当 temp 指向系统所 占用的存储单元时,则可能造成系统崩溃。 注 指针变 量未指 向具体 变 量 时,不 可使用 间接访 问方式 为其赋 值

课堂教学小结: 通过本讲,使学生能掌握指针的定义及引用,使用指针编写简单程序
课堂教学小结: 通过本讲,使学生能掌握指针的定义及引用,使用指针编写简单程序
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第六章 数组.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第七章 指针(二).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第六章 数组 6.5 字符数组.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第八章 结构体与共用体.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第七章 指针(三).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第九章 文件操作.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第七章 指针(四).doc
- 内蒙古科技大学:《C语言程序设计》课程教学大纲 C Language Programming.pdf
- 《计算机组成原理》课程教学课件(PPT讲稿)第1章 计算机组成原理概述 Computer Organization.ppt
- 《计算机组成原理》课程教学课件(PPT讲稿)第6章 总线系统.ppt
- 《计算机组成原理》课程教学课件(PPT讲稿)第3章 指令系统.ppt
- 《计算机组成原理》课程教学课件(PPT讲稿)第2章 运算方法和运算器 第1节 数据表示(数据与文字表示方法).ppt
- 《计算机组成原理》课程教学课件(PPT讲稿)第2章 运算方法和运算器 第2节 定点加减运算及实现 第3节 定点乘法运算及实现 第4节 定点除法运算及实现 第5节 定点运算器的组成与结构 第6节 浮点运算方法和浮点运算器.ppt
- 《计算机组成原理》课程教学课件(PPT讲稿)第4章 中央处理器.ppt
- 《计算机组成原理》课程教学课件(PPT讲稿)第7章 输入输出系统.ppt
- 《计算机组成原理》课程教学课件(PPT讲稿)第5章 存储系统.ppt
- 《计算机组成原理》课程教学课件(PPT讲稿)第8章 外围设备.ppt
- 《计算机组成原理》课程教学资源(实验指导)实验五 模型计算机与指令执行.doc
- 《计算机组成原理》课程教学资源(实验指导)实验四 数据通路.doc
- 《计算机组成原理》课程教学资源(实验指导)实验三 存储器.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第五章 函数.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第六章 数组 6.2.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第六章 数组 6.3.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第六章 数组 6.3.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第四章 程序的控制结构(一).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第四章 程序的控制结构(二).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第四章 程序的控制结构(三).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第四章 程序的控制结构(四).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第三章 简单的C程序设计.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第一章 C简介.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第二章 数据类型、运算符及表达式(二).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第二章 数据类型、运算符及表达式(一).doc
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)编程题.doc
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)填空题.doc
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)改错题.doc
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)选择题.doc
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第八章 结构体与共用体.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第七章 指针.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第九章 文件操作.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第六章 数组.ppt