发布时间 : 星期四 文章C++教学大纲更新完毕开始阅读
第五章 指针
【教学目的和要求】本章是C++语言中非常重要的一部分内容,是C++语言的精华所在。要求学生非常熟练地掌握C++语言中指针变量的定义、作用和各种使用方法。
【教学重点】指针的定义和引用。
【教学难点】利用指针处理字符串、指针在函数中的应用。 【教学方法】讲授与上机相结合。 【思考题】
1. 区分指针和指针变量的含义。
2. 区分两个运算符:*(指针运算符) 和 &(取地址运算符)。 3. 区分下列表示方法:(&a, p, &*p)和(a, *&a)。
【讲授内容】
5.1 指针的概念
指针是指计算机内部存储器中一个存储字节的地址。一个变量的(起始)地址称为该变量的指针。
在C++中每个指针都与一个具体的数据类型相联系,即每个指针为内存中存储该类型的一个数据的地址,具体为存储该数据所占用存储空间的首字节地址。
5.2 指针变量
指针变量:存放另一个变量的地址的变量。 一、指针变量的定义格式:(同普通变量)
类型名 * 变量名 [=初值表达式],…;
如:int a, *p; p=&a; 或 int a, *p=&a; 三、 指向常量的指针: 定义的指针所指向的对象是常量,是不可修改的。定义格式为:const
类型名 * 常量指针名 [=初值表达式]; 四、 指针常量: 指针不能被修改,所指对象能修改,即指针不可再指向其它对象,但它所指向
的对象是可以修改的。
定义格式为:类型名 * const 常量指针名 [=初值表达式];
5.3 指针运算
指针运算包括赋值(=)、取地址(&) 、间接访问(*)、增1(++)和减1(--)、加(+)和减(-)、加赋值(+=)和减赋值(-=)、比较(==,!=,<,<=,>,>=)。
注意区分两个运算符:*(指针运算符) 和 &(取地址运算符);区分下列表示方法:(&a, p, &*p)和(a, *&a)。
·9·
5.4 指针与数组
1. 指针与一维数组
一维数组名是指向该数组第一个元素的指针,为指向元素的指针类型。 2. 指针与二维数组
可以把二维数组看作为一维数组的嵌套:
例如定义char a[5][10]; 二维数组可看作char[10]类型的一维数组a[5], 其值为指向该一维数组的指针;而一维数组a[5] 的每个元素为a[i][10],]为char类型的数据。
数组名是指针常量:a, a[0], &a[0][0]值相同,但类型不同,a是字符数组指针类型 char (*)[10],a[0], &a[0][0]均为字符指针类型 char *
5.5 引用变量
引用变量同一般的变量,只是加了一个&号。
定义格式:类型名 & 引用变量名 = 已有同类变量; 引用主要用途用于定义函数参数: 如:int Add(int &x, int &y) {return x+y;}
int a=5, b=8, c; c=Add(a, b);
5.6 动态存储分配
1. 变量的静态分配:指变量定义语句定义的变量,在编译阶段由系统分配存储空间。 2. 变量的动态分配: 在运行阶段,执行new运算时进行的存储分配,是在程序运行阶段完成的,所以称之为 动态分配。 new运算格式:
new 类型名 [( 初值表达式 )] new 类型名 [ 数组长度 ] 动态空间的释放:
delete 指针变量
delete [] 指向动态数组的指针
·10·
第六章 函数
【教学目的和要求】本章也是C++语言中较重要的内容,要求掌握C++语言中函数的定义、函数说明、函数格式、参数的引用、变量的存储类型及其使用范围。
【教学重点】函数说明、参数的引用、变量的存储类型及其使用范围。 【教学难点】变量的存储类型。 【教学方法】讲授与上机相结合。 【思考题】
1. 函数调用的三种形式是什么?
2. 使用函数的递归调用求Fibonacci数列。
【讲授内容】
6.1 函数的定义
函数定义格式: 类型名 函数名 ( 参数表 ) 函数体。
6.2 函数的调用
1. 调用格式:函数名 ( 实际参数表 ) 2. 调用过程分为三步:
? 参数传递 (实虚结合)
? 执行函数体 (当遇return返回)
? 返回 (返回一个值到调用表达式的位置 )
3. 参数传递: 即:实参向形参的传递,又分为以下两种情况: ? 值传递:非引用参数的传递
原型为int fa(int x, char* a); 调用 fa(35, p); ? 引用传递:引用参数的传递
原型为char* fb(int& x, char*& y); 调用fb(xx, yy);
6.3 变量的作用域
变量的作用域分为:全局、文件、函数、块作用域。 全局作用域::在所有函数定义之外定义的变量,在该程序的所有文件里都可用。 文件作用域:在所有函数定义之外定义的变量,且使用static定义的变量,只在本文件中有效。
函数作用域:专指语句标号,供goto语句作为转移使用,只能在本函数内使用,对于其他函数无效。
·11·
块作用域:在一条复合语句内定义,作用域只在该语句内有效,该复合语句称为块,该变量只能在本语句内使用,之外就不起作用了。
6.4 递归函数
一个函数在它的函数体内直接或间接地调用自己称为函数的递归调用。
6.5 函数重载
具有相同的函数名,而具有不同的参数表的函数,叫函数重载或重载函数。 描述具有相同功能,但处理的数据类型是不同的这一类函数就称为函数重载,或利用函数重载。
6.6 函数模板
函数模板是带有类型参数的函数定义,类型参数由template成分给出。 定义格式为:template<类型参数表> 函数类型
函数名 ( 形式参数表 ) 函数体
6.7 函数指针
函数名是指向该函数执行代码的指针(由于函数通过编译后对应一段代码)。 int fa(int x, int y);对应 int (*) (int, int)
定义函数指针变量并赋予函数指针后,函数指针就可以同函数名一样使用。int (*fp) (int, int)=fa; 调用fa(a, b);与 fp(a,b); 两者是等效的
函数的形参表中也可以使用值参数,引用参数,这里也可以是函数参数(使同类型的函数名或函数指针)。
·12·