C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.

Slides:



Advertisements
Similar presentations
第九章 指针 西安工程大学.
Advertisements

第七章 指针 计算机公共教学部.
C语言程序设计基础 第10章 指针进阶 刘新国.
10.1 二级指针 10.2 指针与二维数组 10.3 指针的动态存储分配 10.4 函数指针 10.5 main函数的参数
第8章 指针 21世纪高等学校精品规划教材.
第 6 章 第 6 章 指 针 指 针 1.
第6章 指针 6.1 指针的概念 6.2 变量与指针 6.3 数组与指针 6.4 字符串与指针 6.5 函数与指针 6.6 返回指针值的函数
6.4 字符串与指针 1. 用字符数组存放一个字符串.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
第六节 二维数组和指针 二维数组的地址 对于一维数组: (1)数组名array表示数组的首地址, 即array[0]的地址;
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
第8讲 函数 8.1 函数的定义与调用 8.2 函数的参数 8.3 函数重载与递归 8.4 标识符作用域与变量的存储特性.
C++语言程序设计教程 第5章 构造数据类型 第5章 构造数据类型.
4.3函数 4.3.1函数的概念及定义 1、函数的概念: 可以被其它程序调用具有 特定功能的一段相对独立的 程序(模块),称函数。
第6章 指针 学习目的与要求: 了解指针的概念和相关术语 熟练掌握指向变量、数组和字符串的指针变量的使用方法 了解指向函数的指针变量
指 针 为什么要使用指针 指针变量 指针与数组 返回指针值的函数 动态内存分配 通过指针引用字符串 指向函数的指针 小 结 习 题.
資料大樓 --談指標與陣列 綠園.
第 十 章 指 针.
第7章 间接访问—指针 指针的概念 指针运算与数组 动态内存分配 字符串再讨论 指针作为函数参数和返回值 指针数组与多级指针
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
Object-Oriented Programming in C++ 第一章 C++的初步知识
走进编程 程序的顺序结构(二).
辅导课程六.
二维数组的指针表示 与复杂的指针例子 专题研讨课之三.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
C语言程序设计基础 第8章 指针 刘新国.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
欲穷千里,更上层楼 第十章 指 针 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环,
第七章 操作符重载 胡昊 南京大学计算机系软件所.
C++大学基础教程 第6章 指针和引用 北京科技大学 信息基础科学系.
六、函数 教学目标: 函数的概念、定义、调用和返回 带自定义函数的程序设计 递推算法 递归思想及算法实现 函数的参数传递方式 C语言程序设计.
第五章 指针 5.1 指针的概念 5.2 指针与数组 5.3 字符串指针.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
C语言大学实用教程 第7章 指针 西南财经大学经济信息工程学院 刘家芬
第二章 Java基本语法 讲师:复凡.
指针 几个概念:  指针也是一种数据类型,具有指针类型的变量,称为指针变量。
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
第6讲 指针与引用 6.1 指针 6.2 引用.
第6章 指针 6.1 指针的概念 6.2 变量与指针 6.3 数组与指针 6.4 字符串与指针 6.5 函数与指针 6.6 返回指针值的函数
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
第九节 赋值运算符和赋值表达式.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第四章 函数 丘志杰 电子科技大学 计算机学院 软件学院.
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
本节内容 指针类型的使用 视频提供:昆山爱达人信息技术有限公司.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C语言程序设计 第8章 指针.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
變數與資料型態  綠園.
資料!你家住哪裏? --談指標 綠園.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计

“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 指针与函数 指针与字符串 指针 void类型指针 指针与数组 动态内存 指针与结构体 指针 动态内存 引用 void类型指针 内存泄漏与悬挂指针 C++语言程序设计

编程技能 a C++语言程序设计

在程序设计中,指针和引用的主要应用之一是作为函数的形式参数 (一)指针与函数 在程序设计中,指针和引用的主要应用之一是作为函数的形式参数 它们形成了C++函数调用中的另一种调用方式:地址调用 地址调用可以 提高参数的传递效率 从函数“返回多个结果” C++语言程序设计

(一)指针与函数 用指针作为函数形式参数,实现地址调用 使用特点 函数的形式参数是指针变量 函数的实际参数是实参变量的地址 形参指针类型和实参变量的类型必须相同 使用特点 因为传递给形参的是实参变量的地址,所以形参指针指向实参变量 通过对形参指针的间接引用运算,就可以访问实参变量,包括改变实参变量的值 函数调用后,可以保留对实参变量的操作结果,如果有多个形参都是指针变量,就可以有多个实参变量在函数调用中得到修改 C++语言程序设计

(一)指针与函数 关于地址调用“可以返回多个结果”的理解 实际上并不存在从形参到实参的“返回”操作 形参指针的间接引用就是对实参变量的操作 实参变量的变化在函数调用过程中已经发生,而不是在函数执行后才发生 C++语言程序设计

(一)指针与函数 例:编写数据交换的函数 C++语言程序设计 //通过地址调用,交换调用程序的两个数据 #include<iostream> using namespace std; void Swap(int *a, int *b); void main() { int x(10), y(5); cout<<"主函数变量的值: x=" <<x<<" y="<<y<<endl; Swap(&x,&y); cout<<"返回后变量的值: x=" } void Swap(int *a, int *b) { int t; t=*a; *a=*b; *b=t; cout<<"函数中完成了交换:*a=" <<*a<<" *b="<<*b<<endl; } 实参变量的地址作为参数 指针变量作为形式参数 C++语言程序设计

(一)指针与函数 执行过程分析 当main()函数调用Swap()函数时,程序中用变量x和y的地址作为实参,传递给指针a和b,这样指针a和b就分别指向了实参变量x和y 当程序调用运行到Swap()内部,通过间接引用*a和*b进行交换,实际上就是x和y进行交换 C++语言程序设计

(一)指针与函数 用引用作为函数形式参数,实现地址调用 使用特点 C++语言程序设计 函数的形式参数是引用 函数的实际参数就是实参变量 形参引用的类型和实参变量的类型必须相同 使用特点 引用作为形式参数时,因为它就是实参变量的引用,所以在函数中并不给其分配内存空间,形参引用和实参变量对应的是同一个内存空间 引用作为形式参数时,它就是实参变量的一个别名 函数对引用的操作,就是对实参变量的操作 函数调用后,可以保留对实参变量的操作结果,如果有多个形参都是引用变量,就可以有多个实参变量在函数调用中得到修改 C++语言程序设计

(一)指针与函数 例:编写数据交换的函数 C++语言程序设计 //用引用作为形式参数,交换两个实际参数 #include<iostream> using namespace std; void Swap_1(int &a, int &b); void main() { int x(10), y(5); cout<<"主函数变量的值: x=" <<x<<" y="<<y<<endl; Swap_1(x, y); cout<<"返回后变量的值: x=" } void Swap_1(int &a, int &b) { int t; t=a; a=b; b=t; cout<<"函数中完成了交换:a=" <<a<<" b="<<b<<endl; } 变量作为实参数 引用变量作为形式参数 C++语言程序设计

(一)指针与函数 执行过程分析 当main()函数调用Swap()_1函数时,程序中用变量x和y作为实参,形参引用a是就是变量x的别名,形参引用b就是变量y的别名 当程序调用运行到Swap()_1函数内部,通过进行a和b的交换,实际上就是x和y进行交换 y x 10 5 a b C++语言程序设计

指针作为形式参数和引用作为形式参数的对比 (一)指针与函数 指针作为形式参数和引用作为形式参数的对比 两者都属于地址调用:通过指针的地址调用和通过引用的地址调用 两者在函数调用时都不建立实参变量的副本,都可以对实参变量本身进行操作 指针作为形式参数,调用函数时,会给形参指针变量分配内存空间,存放的是实参变量的地址,需要通过对形参指针的间接引用运算才能对实参变量操作 引用作为形式参数,它就是实参变量的一个别名,不占用独立的内存空间,对引用的操作就是对实参变量的操作 在C++的编程中,会更多地使用引用作为函数的形式参数 用引用作为形式参数,编程语句上也更简单些 C++语言程序设计

(一)指针与函数 常指针和常引用 常引用 不是所有以指针或引用作为形参的函数都需要修改指针所指的数据 例如:在调用一个求数组最大值的函数时,就不希望数组元素的值发生变化,所以希望在函数中能够限制对数组元素的修改 使用常指针和常引用可以实现对传递参数的保护 常引用 是指引用的是常量,也就是不能通过引用本身改变其所引用的对象 如果实参数需要保护,可以使用“常引用”作为形式参数 声明格式:const <类型名> <引用名>&; C++语言程序设计

(一)指针与函数 常指针 是指向常量的指针,就是规定指针所指向的内容不可以通过指针的间接引用来改变 声明格式: const <类型名> *<指针名>; 例如:const int *ptint; ptint的类型是(const int *),也就是指向一个恒定的整型数的指针 整型数本身也许是可以改变的,只是不可以通过指针ptint的间接引用来改变 而ptint也可以用不同的地址来对它赋值 常指针最常见的应用是出现在函数原型中 例如:char *strcpy(char *s1,const char *s2);//功能是把s2指向的字符串复制给s1 s2指向的字符串不要被函数修改,所以定义常指针 C++语言程序设计

(一)指针与函数 指针常量 指针本身的内容是常量 声明格式:<类型名> *const <指针名>=<初值>; 例如:char ch, *const ptch=&ch; 指针ptch是用ch地址初始化的常量,不可以改为其它地址 可以通过ptch的间接引用来改变ch的值 数组名就是一个指针常量 C++语言程序设计

(一)指针与函数 指针函数 如果一个函数的返回值是指针,则这样的函数称为指针函数 例如: int * func01(int k); 返回指针,实际上就是返回一个内存单元的地址 注意:不能返回函数中局部变量的地址 这样的地址处于内存的栈区,函数结束时所占用的栈空间就释放了,回到主调函数后不能再使用该空间了 C++语言程序设计

(一)指针与函数 例:利用指针函数完成一个数组的倒序排列 C++语言程序设计 // 在指针函数reverse中,申请动态数组,最后返回这个地址 #include <iostream> using namespace std; int * reverse(int const * list, const int size); //指针函数 void printArray(int const *list, const int size); void main() { int list[] = {1, 2, 3, 4, 5, 6}; int *pList = reverse(list, 6); //获得倒序排序后数组的地址 printArray(pList, 6); //显示倒序排序后的数组 delete[]pList; } C++语言程序设计

(一)指针与函数 例:利用指针函数完成一个数组的倒序排列 C++语言程序设计 // 在指针函数reverse中,申请动态数组,最后返回这个地址 int * reverse(int const * list, const int size) //指针函数 { int *result = new int[size]; //函数中申请的动态数组 for (int i = 0, j = size - 1; i < size; i++, j--) result[j] = list[i]; return result; //返回动态数组的地址 } void printArray(int const *list, const int size) for (int i = 0; i < size; i++) cout << list[i] << " "; 不能在reverse函数中定义局部数组int result[6],使用堆空间是比较好的解决办法 C++语言程序设计

(一)指针与函数 函数指针 指针和函数有着天然的联系——函数名本身就是地址 指向函数的指针称为函数指针 声明格式: <类型名> (*指针名) (形参列表); 例如: int (*fptr)(int,int); 定义了一个函数指针fptr,它可以指向带两个整型参数且返回值类型为整型的任意函数 可使用函数名对函数指针进行初始化(赋值) 因为函数名代表函数的内存地址,所以给函数指针赋值时,直接用函数名,不需要取地址运算符& 函数指针指向某个函数后,就可以像使用函数名一样使用函数指针来调用函数了 C++语言程序设计

(一)指针与函数 例:使用函数指针调用函数 C++语言程序设计 // 在函数指针调用函数 #include <iostream> using namespace std; float areaofRectangle(float width,float height) { return width*height; } float areaofTriangle(float heml,float height) return (heml*height)/2; C++语言程序设计

(一)指针与函数 例:使用函数指针调用函数 C++语言程序设计 void main() { 定义函数指针 float (*fptr)(float,float); float area, worh, height; cout<<"请输入矩形的宽和高:"<<endl; cin>>worh>>height; fptr = areaofRectangle; area = fptr(worh, height); cout<<"矩形的面积为:"<<area<<endl;   cout<<"请输入三角形的底和高:"<<endl; fptr = areaofTriangle; cout<<"三角形面积为:"<<area<<endl; } 定义函数指针 直接用函数名给函数指针赋值,不需要取地址运算符& 使用函数指针调用函数 C++语言程序设计