首页 哈工大c语言课件9

哈工大c语言课件9

举报
开通vip

哈工大c语言课件9null第9章 指针第9章 指针哈尔滨工业大学 计算机科学与技术学院本章学习内容本章学习内容 指针数据类型  指针变量的定义和初始化  取地址运算符,间接寻址运算符  按值调用与按地址调用,指针变量作函数 参数  函数指针 例7.9未能解决的问题:两数互换 void Swap(int x,int y) { int temp; temp = x; x = y; y = temp; }int main() { int a, b; a = 5;...

哈工大c语言课件9
null第9章 指针第9章 指针哈尔滨工业大学 计算机科学与技术学院本章学习 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 本章学习内容 指针数据类型  指针变量的定义和初始化  取地址运算符,间接寻址运算符  按值调用与按地址调用,指针变量作函数 参数  函数指针 例7.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未能解决的问题:两数互换指针为函数提供修改变量值的手段 9.1变量的内存地址9.1变量的内存地址int a=0;0x0037b000a某存储区域 9.1变量的内存地址 9.1变量的内存地址0x0037b000某存储区域0x0037b0010x0037b0020x0037b003&aint a=0;a 9.1变量的内存地址 9.1变量的内存地址0x0037b000某存储区域0x0037b0010x0037b0020x0037b003&aint a=0;a 9.1变量的内存地址 9.1变量的内存地址【例9.1】使用取地址运算符&取出变量的地址,然后将其显示在屏幕上。 9.1变量的内存地址 9.1变量的内存地址0x0037b000某存储区域0x0037b0010x0037b0020x0037b003&aaint a=0; 9.1变量的内存地址 9.1变量的内存地址0x0037b000某存储区域0x0037b0010x0037b0020x0037b003间接寻址:通过存放变量地址的变量去访问变量&aaint a=0;nullint i; scanf("%d", i); /* 这样会如何?*/ char c; scanf("%d", &c); /* 这样呢?*/i的值被当作地址。如i==100,则输入的整数就会从地址100开始写入内存输入以int的二进制形式写到c所在的内存空间。 c所占内存不足以放下一个int,其后的空间也被覆盖 9.2指针变量的定义和初始化9.2指针变量的定义和初始化存放变量的地址需要一种特殊类型的变量 指针(Pointer)类型 指针变量——具有指针类型的变量 变量的指针←→变量的地址 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.2指针变量的定义和初始化 9.2指针变量的定义和初始化【例9.2】使用指针变量在屏幕上显示变量的地址值 9.2指针变量的定义和初始化 9.2指针变量的定义和初始化【例9.2】使用指针变量在屏幕上显示变量的地址值 9.3 间接寻址运算符 9.3 间接寻址运算符【例9.3】使用指针变量,通过间接寻址输出变量的值 9.3 间接寻址运算符 9.3 间接寻址运算符【例9.3】使用指针变量,通过间接寻址输出变量的值99.4 按值调用与按地址调用普通变量作函数参数—按值调用(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】演示按值调用 9.4 按值调用与按地址调用 9.4 按值调用与按地址调用【例9.5】演示按地址调用 9.4 按值调用与按地址调用 9.4 按值调用与按地址调用【例9.4】演示按值调用【例9.5】演示按地址调用 9.4 按值调用与按地址调用 9.4 按值调用与按地址调用【例9.4】演示按值调用null 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; } 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程序 2 实 参形 参结果有何不同?Trace the execution例9.6:编写函数实现两数的互换nullint 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; }55ab实 参形 参99xy55temp9x 和 y是内部变量 单向值传递例9.6:编写函数实现两数的互换主调函数被调函数nullint 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; }&a&a实 参形 参&b&bxy5temp5ab995*x*y交换的是x 和 y 指向的单元内容主调函数被调函数例9.6:编写函数实现两数的互换nullvoid 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; } 永远要清楚: 每个指针指向了哪里 指针指向的内容是什么 nullvoid 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.5用指针变量作函数参数的程序实例 【例9.7】计算并输出最高分及相应学生的学号9.5用指针变量作函数参数的程序实例 【例9.7】计算并输出最高分及相应学生的学号9.5用指针变量作函数参数的程序实例 9.5用指针变量作函数参数的程序实例 9.5用指针变量作函数参数的程序实例 【例9.7】计算并输出最高分及相应学生的学号9.5用指针变量作函数参数的程序实例 9.5用指针变量作函数参数的程序实例 【例9.7】计算并输出最高分及相应学生的学号9.5用指针变量作函数参数的程序实例 9.5用指针变量作函数参数的程序实例 【例9.7】计算并输出最高分及相应学生的学号9.6函数指针及其应用 9.6函数指针及其应用 函数指针(Function Pointers)就是指向函数的指针(Pointer to a Function) 指向函数的指针变量存储的是函数在内存中的入口地址 编译器将不带()的函数名解释为该函数的入口地址 数据类型 (* 指针名)(); 例如:int (*p)(); 常见错误: 忘记了前一个(),写成 int *p(); /*声明一个函数名为p、返回值是整型指针的函数*/ 忘掉了后一个(),写成 int (*p); /*定义了一个整型指针*/ 定义时后一个括号内的参数类型与指向的函数参数类型不匹配null应用 编写通用性更强的函数 典型实例1 计算函数的定积分 典型实例2 既能按照升序排序,又能按照降序排序9.6函数指针及其应用 null【例9.8】修改例8.8中的排序函数,使其既能实现对学生成绩的升序排序,又能实现对学生成绩的降序排序 先不使用函数指针编程 9.6函数指针及其应用 null9.6函数指针及其应用 null9.6函数指针及其应用 nullnull【例9.9】修改例9.8中的程序实例,用函数指针编程实现一个通用的排序函数,对学生成绩既能实现升序排序,又能实现降序排序 使用函数指针编程 9.6函数指针及其应用 null9.6函数指针及其应用 null9.6函数指针及其应用 nullvoid SelectionSort(int a[], int n, int (*compare)(int a, int b)) { …… if ((*compare)(a[j], a[k])) …… } /*决定数据是否按升序排序,ab为真,则按降序排序*/ int Descending(int a, int b) { return a > b; } 9.6函数指针及其应用 指针变量与其他类型变量的对比指针变量与其他类型变量的对比共性 在内存中占据一定大小的存储单元 先定义,后使用 特殊性 它的内容只能是地址 必须初始化后才能使用,否则指向不确定的存储单元 只能指向同一基类型的变量 可参与的运算:加、减整数,自增、自减、关系、赋值 使用原则 明确指针指向了哪里 明确指针指向单元的内容是什么 永远不要使用未初始化的指针变量nullQuestions and answers
本文档为【哈工大c语言课件9】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_902335
暂无简介~
格式:ppt
大小:3MB
软件:PowerPoint
页数:0
分类:其他高等教育
上传时间:2012-03-31
浏览量:19