c语言第九章(苏小红版).ppt

上传人:牧羊曲112 文档编号:5426491 上传时间:2023-07-05 格式:PPT 页数:46 大小:1.77MB
返回 下载 相关 举报
c语言第九章(苏小红版).ppt_第1页
第1页 / 共46页
c语言第九章(苏小红版).ppt_第2页
第2页 / 共46页
c语言第九章(苏小红版).ppt_第3页
第3页 / 共46页
c语言第九章(苏小红版).ppt_第4页
第4页 / 共46页
c语言第九章(苏小红版).ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《c语言第九章(苏小红版).ppt》由会员分享,可在线阅读,更多相关《c语言第九章(苏小红版).ppt(46页珍藏版)》请在三一办公上搜索。

1、第9章 指针,哈尔滨工业大学计算机科学与技术学院苏小红,本章学习内容,指针数据类型 指针变量的定义和初始化 取地址运算符,间接寻址运算符 按值调用与按地址调用,指针变量作函数 参数 函数指针,void Swap(int x,int y)int temp;temp=x;x=y;y=temp;,int main()int a,b;a=5;b=9;Swap(a,b);printf(a=%d,b=%d,a,b);return 0;,程序 1:简单变量作函数参数,例7.9未能解决的问题:两数互换,Not Work!Why?,指针为函数提供修改变量值的手段,9.1变量的内存地址,int a=0;,0 x0

2、037b000,a,某存储区域,9.1变量的内存地址,0 x0037b000,某存储区域,0 x0037b001,0 x0037b002,0 x0037b003,&a,int a=0;,a,9.1变量的内存地址,0 x0037b000,某存储区域,0 x0037b001,0 x0037b002,0 x0037b003,&a,int a=0;,a,9.1变量的内存地址,【例9.1】使用取地址运算符&取出变量的地址,然后将其显示在屏幕上。,9.1变量的内存地址,0 x0037b000,某存储区域,0 x0037b001,0 x0037b002,0 x0037b003,&a,a,int a=0;,9

3、.1变量的内存地址,0 x0037b000,某存储区域,0 x0037b001,0 x0037b002,0 x0037b003,间接寻址:通过存放变量地址的变量去访问变量,&a,a,int a=0;,int i;scanf(%d,i);/*这样会如何?*/char c;scanf(%d,/*这样呢?*/,i的值被当做地址。如i=100,则输入的整数就会从地址100开始写入内存,输入以int的二进制形式写到c所在的内存空间c所占内存不足以放下一个int,其后的空间也被覆盖,9.2指针变量的定义和初始化,存放变量的地址需要一种特殊类型的变量指针(Pointer)类型指针变量具有指针类型的变量变量的

4、指针变量的地址,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,如果指针指向一个非你控制的内存空间并对该空间进行访问,将可能造成危险,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,9.3 间接寻址运算符,【例9.3

5、】使用指针变量,通过间接寻址输出变量的值,9.3 间接寻址运算符,【例9.3】使用指针变量,通过间接寻址输出变量的值,9,普通变量作函数参数按值调用(Call by Value)Can not modify the argument 形参(Parameter)实参变量(Variable)指针作函数参数按地址调用(Call by Reference)In order to modify the argument,use:指针形参(Pointer Parameter)&(variable),9.4 按值调用与按地址调用,9.4 按值调用与按地址调用,【例9.4】演示按值调用,9.4 按值调用与按地

6、址调用,【例9.5】演示按地址调用,9.4 按值调用与按地址调用,【例9.4】演示按值调用,【例9.5】演示按地址调用,9.4 按值调用与按地址调用,【例9.4】演示按值调用,void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,int main()int a,b;a=5;b=9;Swap(,void Swap(int x,int y)int temp;temp=x;x=y;y=temp;,int main()int a,b;a=5;b=9;Swap(a,b);printf(a=%d,b=%d,a,b);return 0;,程序 1,程序

7、2,实 参,形 参,结果有何不同?,Not Work!Why?,Trace the execution,例9.6:编写函数实现两数的互换,int main()int a,b;a=5;b=9;Swap(a,b);printf(a=%d,b=%d,a,b);return 0;,void Swap(int x,int y)int temp;temp=x;x=y;y=temp;,5,5,a,b,实 参,形 参,9,9,x,y,5,5,temp,9,x 和 y是内部变量单向值传递,例9.6:编写函数实现两数的互换,主调函数,被调函数,int main()int a,b;a=5;b=9;Swap(,voi

8、d Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,&a,&a,实 参,形 参,&b,&b,x,y,5,temp,5,a,b,9,9,5,*x,*y,交换的是x 和 y指向的单元内容,主调函数,被调函数,例9.6:编写函数实现两数的互换,void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,指针pTemp未初始化指针pTemp指向哪里未知对未知单元写操作是危险的,void Swap(int*x,int*y)int*pTemp;*pTemp=*x;*x=*y;*y=*pTemp;,永远要清楚:

9、每个指针指向了哪里指针指向的内容是什么,void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,指针pTemp被赋了值但交换的是地址值不是指针指向单元的内容,void Swap(int*x,int*y)int*pTemp;pTemp=x;x=y;y=pTemp;,9.5用指针变量作函数参数的程序实例,【例9.7】计算并输出最高分及相应学生的学号,【例9.7】计算并输出最高分及相应学生的学号,Not Work!Why?,9.5用指针变量作函数参数的程序实例,9.5用指针变量作函数参数的程序实例,【例9.7】计算并输出最高分及相应学生的学号,9.

10、5用指针变量作函数参数的程序实例,【例9.7】计算并输出最高分及相应学生的学号,9.5用指针变量作函数参数的程序实例,【例9.7】计算并输出最高分及相应学生的学号,9.6函数指针及其应用,函数指针(Function Pointers)就是指向函数的指针(Pointer to a Function)指向函数的指针变量存储的是函数在内存中的入口地址 编译器将不带()的函数名解释为该函数的入口地址数据类型(*指针名)();例如:int(*p)();常见错误:忘记了前一个(),写成int*p();/*声明一个函数名为p、返回值是整型指针的函数*/忘掉了后一个(),写成int(*p);/*定义了一个整型

11、指针*/定义时后一个括号内的参数类型与指向的函数参数类型不匹配,应用编写通用性更强的函数典型实例1计算函数的定积分典型实例2既能按照升序排序,又能按照降序排序,9.6函数指针及其应用,【例9.8】修改例8.8中的排序函数,使其既能实现对学生成绩的升序排序,又能实现对学生成绩的降序排序先不使用函数指针编程,9.6函数指针及其应用,9.6函数指针及其应用,9.6函数指针及其应用,【例9.9】修改例9.8中的程序实例,用函数指针编程实现一个通用的排序函数,对学生成绩既能实现升序排序,又能实现降序排序 使用函数指针编程,9.6函数指针及其应用,9.6函数指针及其应用,9.6函数指针及其应用,void

12、SelectionSort(int a,int n,int(*compare)(int a,int b)if(*compare)(aj,ak)/*决定数据是否按升序排序,ab为真,则按降序排序*/int Descending(int a,int b)return a b;,9.6函数指针及其应用,指针变量与其他类型变量的对比,共性在内存中占据一定大小的存储单元先定义,后使用特殊性它的内容只能是地址必须初始化后才能使用,否则指向不确定的存储单元只能指向同一基类型的变量可参与的运算:加、减整数,自增、自减、关系、赋值使用原则明确指针指向了哪里明确指针指向单元的内容是什么永远不要使用未初始化的指针变量,Questions and answers,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号