C语言程序设计第四版-8-谭浩强课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言程序设计第四版-8-谭浩强课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第四 谭浩强 课件
- 资源描述:
-
1、第第8 8章章 指针指针指针是指针是C语言的一个重要特色;语言的一个重要特色;正确而灵活地运用指针可以:正确而灵活地运用指针可以:有效表示复杂的数据结构;有效表示复杂的数据结构;能动态分配内存;能动态分配内存;方便地使用字符串;方便地使用字符串;有效而方便地使用数组;有效而方便地使用数组;在调用函数时能获得在调用函数时能获得1个以上的结果;个以上的结果;能直接处理内存单元的地址能直接处理内存单元的地址可以使程序简洁、紧凑、高效可以使程序简洁、紧凑、高效关于指针关于指针 由内存单元组成,每个单元有地址,由内存单元组成,每个单元有地址,存放一字节数据存放一字节数据内存储器内存储器000000011
2、111010013A613A513A7short int a;变量变量aa=500;内存地址是二进制数,内存地址是二进制数,通常写成十六进制通常写成十六进制内存地址内存地址内存中存储单元的编号内存中存储单元的编号 计算机内存由大量存储单元计算机内存由大量存储单元 (memory unit)组成。组成。 每个存储单元容量为字节每个存储单元容量为字节(byte) 。 每个存储单元有编号,即存储单元的每个存储单元有编号,即存储单元的“地址地址” (address) 。 存储单元中可存放数据存储单元中可存放数据(data)。变量的地址变量的地址 定义变量时,系统分配给变量的内定义变量时,系统分配给变量
3、的内存单元的存单元的起始地址起始地址 变量值的存取通过变量在内存中的变量值的存取通过变量在内存中的地址进行地址进行 变量的地址称为变量的地址称为“指针指针”(pointer)(1)直接访问直接访问直接利用变量的地址进直接利用变量的地址进行存取行存取 例:例:short int a; /分配内存地址分配内存地址 a=500; 在符号表中检索变量名在符号表中检索变量名a,找到其起,找到其起始地址始地址(例如例如13A6);将数值;将数值500(的二的二进制形式进制形式)送到内存单元送到内存单元13A6和和13A7中中变量的访问方式变量的访问方式(2)间接访问间接访问通过指针变量访问变量通过指针变量
4、访问变量地址地址 定义一种特殊的定义一种特殊的变量变量,用来,用来存放存放其其它变量的它变量的地址地址(指针指针),这种变量称为),这种变量称为指针变量指针变量,它,它指向指向一个普通的变量。一个普通的变量。变量的访问方式变量的访问方式指针变量的定义和调用指针变量的定义和调用int a;int *a_pointer;a = 500;a_pointer = &a;printf(%dn,*a_pointer);printf(%xn,a_pointer);*a_pointer = 3;定义一个指针变量定义一个指针变量它它指向指向一个整型变量一个整型变量(基类型基类型)给指针变量赋值给指针变量赋值指针
5、变量的值是指针变量的值是另一个变量的地址另一个变量的地址指针变量所指针变量所指向指向的的变量即变量即a的值的值指针变量的值,指针变量的值,即即a的地址的地址对对指向指向的变量的变量(即即a)赋值赋值例:例:73页输页输出格出格式式两个指针变量交换两个指针变量交换了它们的值,也就了它们的值,也就是交换了指向是交换了指向int main() int n1,n2; int *n1_p=&n1, *n2_p=&n2, *pointer; printf(Input n1:); scanf(%d,n1_p); printf(Input n2:); scanf(%d,n2_p); printf(n1=%d,
6、 n2=%dn, n1, n2); printf(*n1_p=%d, *n2_p=%dn, *n1_p, *n2_p); printf(n1_p=%o, n2_p=%on, n1_p, n2_p); pointer=n1_p; n1_p=n2_p; n2_p=pointer; printf(n1=%d, n2=%dn, n1, n2); printf(*n1_p=%d, *n2_p=%dn, *n1_p, *n2_p); printf(n1_p=%o, n2_p=%on, n1_p, n2_p);例例. 分析以下程序运行结果分析以下程序运行结果开始时指针变量开始时指针变量n1_p指向指向n1,
7、指针变量,指针变量n2_p指向指向n2。变量变量n1和和n2的值并没有改变,但的值并没有改变,但n1_p 和和n2_p的值改变了,也就是指向改变了。的值改变了,也就是指向改变了。指针变量指针变量n1_p指向指向n2,指针变量,指针变量n2_p指向指向n1。上页代码要点上页代码要点内存内存内存单元内存单元内存单元的地址内存单元的地址变量的首地址变量的首地址指针指针指针变量指针变量指针变量的指向指针变量的指向直接访问与间接访问直接访问与间接访问掌握几个重要概念掌握几个重要概念区别两个区别两个 *p int *p; p=&a; *p=3;指针变量的重要作用之一指针变量的重要作用之一 作为函数的参数,
8、实现地址传递作为函数的参数,实现地址传递int main() void swap(int p1,int p2); int a,b; scanf(%d,%d,&a,&b); if(ab) swap(a,b); printf(%d,%dn,a,b); return 0; 例例 函数调用中的值传递函数调用中的值传递void swap(int p1,int p2) int p; p=p1; p1=p2; p2=p;运行结果:运行结果:a,b没有交换。没有交换。原因:原因:C语言中,实参向形参语言中,实参向形参传递数据采用传递数据采用“值传递值传递”,形参单独占用内存单元,交形参单独占用内存单元,交换对
9、实参无影响。换对实参无影响。void swap(int *p1,int *p2) int p; p=*p1; *p1=*p2; *p2=p;例例 通过指针变量实现地址传递的效果通过指针变量实现地址传递的效果注意这两个注意这两个*p1的的含义不同,前者说含义不同,前者说明明p1为指针变量,为指针变量,后者表示后者表示p1所指向所指向的变量。的变量。int main() void swap(int *p1,int *p2); int a,b; int *a_p=&a, *b_p=&b; scanf(%d,%d,&a,&b); if(ab) swap(a_p,b_p); printf(%d,%dn,
10、a,b); return 0; p是普通的变量是普通的变量指针变量作为函数的参数指针变量作为函数的参数指针作实参,对应的形参是指针变量。指针作实参,对应的形参是指针变量。C语言的参数传递是语言的参数传递是“值传递值传递”。指针变量做参数时,由于其值为变量的地址,指针变量做参数时,由于其值为变量的地址,产生产生“地址传递地址传递”的效果的效果。数组做函数的参数时,也是数组做函数的参数时,也是“地址传递地址传递”。被调用函数不能改变实参指针变量的值,但被调用函数不能改变实参指针变量的值,但可以改变实参指针变量所指向的变量的值。可以改变实参指针变量所指向的变量的值。指针变量指针变量阅读例阅读例8.2
11、-例例8.5,上机调试上机调试,观察结果,分,观察结果,分析掌握。析掌握。要求能够熟练地掌握指针变量及其指向的变要求能够熟练地掌握指针变量及其指向的变化过程,能够化过程,能够在纸上在纸上画图表达分析过程。画图表达分析过程。访问数组访问数组指针的又一重要用途指针的又一重要用途short int a3;200020022004a0a1a2元素的地址元素的地址数组元素数组元素元素的值元素的值0000000000000110a2=6;xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx元素的地址元素的地址数组的首地址数组的首地址数组和指针的相关概念数组和
12、指针的相关概念数组的指针:数组的指针:数组数组在内存中的在内存中的起始地址起始地址,即即首元素首元素(下标为下标为0的元素的元素)的的首地址首地址数组元素的指针:数组元素的指针:数组元素数组元素在内存中的在内存中的起始地址起始地址数组名数组名:代表数组首元素的地址:代表数组首元素的地址(指针指针)指向数组的指向数组的指针变量指针变量:存储数组某个元:存储数组某个元素的地址,即素的地址,即指向某个元素指向某个元素定义指向数组的指针变量定义指向数组的指针变量u int array5, *pointer = array;u int array5, *pointer; pointer = array;
展开阅读全文