中国高校课件下载中心 》 教学资源 》 大学文库

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

文档信息
资源类别:文库
文档格式:DOC
文档页数:4
文件大小:153KB
团购合买:点击进入团购
内容简介
内蒙古科技大学:《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 指向系统所 占用的存储单元时,则可能造成系统崩溃。 注 指针变 量未指 向具体 变 量 时,不 可使用 间接访 问方式 为其赋 值

课堂教学小结: 通过本讲,使学生能掌握指针的定义及引用,使用指针编写简单程序

课堂教学小结: 通过本讲,使学生能掌握指针的定义及引用,使用指针编写简单程序

已到末页,全文结束
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档