《C++程序设计简明教程》-王晓东-电子教案 第5章 数组与指针

上传人:E**** 文档编号:89433012 上传时间:2019-05-25 格式:PPT 页数:46 大小:202.50KB
返回 下载 相关 举报
《C++程序设计简明教程》-王晓东-电子教案 第5章  数组与指针_第1页
第1页 / 共46页
《C++程序设计简明教程》-王晓东-电子教案 第5章  数组与指针_第2页
第2页 / 共46页
《C++程序设计简明教程》-王晓东-电子教案 第5章  数组与指针_第3页
第3页 / 共46页
《C++程序设计简明教程》-王晓东-电子教案 第5章  数组与指针_第4页
第4页 / 共46页
《C++程序设计简明教程》-王晓东-电子教案 第5章  数组与指针_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《《C++程序设计简明教程》-王晓东-电子教案 第5章 数组与指针》由会员分享,可在线阅读,更多相关《《C++程序设计简明教程》-王晓东-电子教案 第5章 数组与指针(46页珍藏版)》请在金锄头文库上搜索。

1、第5章 数组与指针,5.1 数组 5.2 指针 5.3 字符串 5.4 动态内存分配 5.5 C+程序的结构,5.1 数组,数组是具有相同类型的相关数据的集合。 一维数组是数组的基础,定义方式是: 类型 数组名常量表达式; 例如: int a5; 定义了一个长度为5的整型数组a,它有5个元素,一个元素相当于一个普通的变量,每个元素可以存放一个整型数据。,数组的初始化,对数组的全体元素赋初值,例如: int a5=1,2,3,4,5; 初始化列表中的数据与数组的元素一一对应。 对数组的部分元素赋初值,例如: int a5=1,2,3; 数组a的前三个元素依次赋以初值1、2和3。剩余没有赋初值的元

2、素都自动赋以0。,元素,数组元素的引用形式是: 数组名下标 例如: int a5=1,2,3,4,5; a4=a0*a2-3*a1; 下标从0开始,实际上是数组元素的序号,表示元素在数组中的相对位置。数组的元素在内存中按顺序存放。,输入10个整数,再反向输出。,#include #include int main() int a10,i; for(i=0;iai;/输入数据存入数组 for(i=9;i=0;i-) coutsetw(3)ai;/从数组输出数据 coutendl; return(0); ,数组作形参,函数形参为数组,其长度可以省略,但是数组的类型必须与实参数组的类型严格一致。 函

3、数调用时,数组名作为函数的实参。 发生函数调用时,把数组名作为实参传递给形参数组,这两个数组各自的元素在内存共占同一段空间。因此对形参数组元素值的修改,也同步影响着实参数组相对应的元素。,二维数组,二维数组的定义方式是: 类型 数组名常量表达式常量表达式; 例如: int a22; 表示定义了一个2行2列的二维整型数组a。通常形象地把二维数组的第一个下标称为行下标,第二个下标称为列下标,它们均从0开始。 二维数组的元素在内存中按行顺序存放。,二维数组的初始化,对数组的全体元素赋初值,例如: int a22=1,2,3,4; int a22=1,2,3,4; 对数组的部分元素赋初值,例如: in

4、t a2=1,2; 数组a的a00和a10两个元素分别被赋以初值1和2。,计算两个33矩阵的和,#include #include const int n=3; int main() int ann,bnn,cnn,i,j; coutaij;/输入第一个矩阵 coutbij;/输入第二个矩阵 for(i=0;in;i+) for(j=0;jn;j+) cij=aij+bij;/矩阵求和 for(i=0;in;i+) for(j=0;jn;j+) coutsetw(4)cij; coutendl;/输出一行数据 return(0); ,对象数组,对象数组的定义方式是: 类名 数组名常量表达式;

5、学习对象数组应重点掌握两个方面,一个是对象数组的初始化,另一个是对象数组的元素的操作。,对象数组的初始化,由于对象数组的元素本身就是对象,对象数组在创建时,必然会自动调用每一个元素的构造函数。 1.如果构造函数没有形参,或者全部设置了默认形参值,或者甚至没有定义构造函数,而是采用系统提供的默认构造函数,那么可以不提供初始化列表。,2.如果构造函数需要用户给出参数,那么必须提供初始化列表。而且如果只需要1个参数,则初始化列表可以采用与普通数组相同的形式。 3.如果构造函数需要用户给出两个以上的参数,那么必须提供初始化列表,并且在列表中显式调用每个元素的构造函数。 point p3=point(1

6、,1),point(2,2),point(3,3);,操作对象数组的元素,操作对象数组的元素,其一般形式是: 数组名下标.公有成员函数名(实参列表); 采用这种形式,再综合前面学过的处理数组的方法,就可以实现对一批相关对象的统一处理。,vector容器,vector容器的定义方式是: vector容器名; vector容器名(长度,初值); 例如: vector a(10,1); 容器a有10个整型的元素,每个元素的值均为1。,5.2 指针,指针变量的定义: 类型 *变量名; 例如: int a,*b; 和指针有关的运算主要有赋值、取地址、间接访问以及加减运算等。取地址的运算符是&,间接访问的

7、运算符是*。,指针变量的引用,#include int main() int a=3,*p;/定义一个普通整型变量和一个整型指针变量 p= ,指针作函数的形参,1.把形参设置为指针变量,如果需要修改n个主调函数的变量,就设置n个相应的指针形参。 2.在函数调用时把主调函数的变量地址作为实参,传递给指针形参,使得指针形参分别指向主调函数中的这些变量。 3.利用间接访问方式,修改主调函数中相应变量的值。,交换两个整型变量的值,#include int main() void swap(int *p,int *q);/函数声明 int a,b; coutab; swap( ,指针与数组,数组名表示数

8、组的起始地址,而数组元素又是在内存顺序存放的,因此利用指针的移动,可以很方便地实现对数组各个元素的访问。,int a3,*p; p=a;,分别用下标法和指针法访问数组,#include #include int main() int a5=1,2,3,4,5,i,*p=a; for(i=0;i5;i+) coutsetw(3)ai; /下标法 coutendl; for(i=0;i5;i+) coutsetw(3)*(a+i);/指针法 coutendl; for(i=0;i5;i+,p+) coutsetw(3)*p; /指针法 coutendl; return(0); ,行指针: 类型 (

9、*变量名)常量表达式; 指针数组: 类型 *数组名常量表达式; 指向指针的指针变量: 类型 *变量名; 指向函数的指针变量: 类型 (*变量名)(形参表); 返回指针的函数: 类型* 函数名(形参表);,对象指针,对象指针变量的定义形式: 类名 *变量名; 通过对象指针,间接访问所指对象的外部接口。 对象指针-公有成员函数名(实参表);,this指针,this指针,它是一个特殊的对象指针,指向对象自身。this指针被隐含地用来访问对象的数据成员和成员函数。 coutxendl;,成员指针,类型 类名:*成员指针名;/定义指向数据成员的指针 类型 (类名:*成员指针名)(形参表);/定义指向成员

10、函数的指针 例如: point a;/普通对象a int point:*p1;/指向point类数据成员的指针p1 void (point:*p2)(void);/指向point类成员函数的指针p2 p2=point:display;/p2指向point类的成员函数display,用于成员指针访问的运算符,.*运算符的左操作数是对象,右操作数是成员指针;-*运算符的左操作数是对象指针,右操作数是成员指针。 以指向成员函数的成员指针为例: (对象.*成员指针)(实参表); (对象指针-*成员指针)(实参表);,5.3 字符串,C+语言以字符数组的形式,把字符串常量存放在内存中。自动为字符串常量在

11、结尾处加上一个0字符,又称为空字符,用以标明字符串结束的位置。例如: char s6=“hello“;,也可以用字符指针变量指向一个字符串常量。例如: char *p=“hello“; 表示定义一个字符指针变量p,并指向字符串”hello”。,将字符串中的小写字母转换为大写字母,#include int main() const int n=100; char sn;/定义字符数组 int i; couts; for(i=0;si!=0;i+) /请注意循环条件 if(si=a ,字符串库函数,char* strcat(char* dest,const char* src); char* st

12、rcpy(char* dest,const char* src); int strcmp(const char* s1,const char* s2); int strlen(const char* s); char* strchr(const char* s,char c); char* strstr(const char* s1,const char* s2);,#include #include int main() const int n=100; char an=“ABC“,*p=“DEF“; if(strcmp(a,p)=0) cout“两个字符串相同“endl; else cou

13、t“两个字符串不相同“endl; strcat(a,p); cout“连接之后的字符串是:“aendl; cout“连接之后的字符串的有效长度是:“strlen(a)endl; strcpy(a,p); cout“复制之后的字符串是:“aendl; return(0); ,字符串类,string s1;/空串 string s2(”abc”);/字符串的内容是abc string s3(s2);/与对象s2的字符串内容相同,#include #include using namespace std; int main() string s1(“ABC“),s2(“DEF“); if(s1=s2

14、) cout“两个字符串相同“endl; else cout“两个字符串不相同“endl; s1+=s2;/字符串连接 cout“连接之后的字符串是:“s1endl; cout“连接之后的字符串的有效长度是:“s1.size()endl; s1=s2; cout“复制之后的字符串是:“s1endl; return(0); ,5.4 动态内存分配,C+语言提供了两个专门用于动态内存分配的运算符,分别是new和delete。new用于分配空间,一般与赋值运算符一起出现,其形式是: 指针变量=new 类型(初始化列表); 例如: float *p; p=new float(3.2);,new还可以为

15、对象动态分配空间,并调用构造函数进行初始化。例如: point *p; p=new point(3,4);,delete,当动态分配的空间不再使用时,要及时用delete释放。其形式是: delete 指针变量; 也可以为数组动态分配内存空间,返回该数组的首地址。其形式是: 指针变量=new 类型合法表达式;/动态一维数组 指针变量=new 类型合法表达式常量表达式;/动态二维数组,动态创建的数组无法进行初始化。对于动态创建的一维数组,其长度可以是结果为正整数的任意合法表达式,返回的指针是数组的首地址。对于动态创建的二维数组,其行的长度可以是结果为正整数的任意合法表达式,返回的指针是行指针;但是其列的长度必须是常量。例如: int *p1,(*p2)5,i=4; p1=new inti;/动态创建长度为4的一维整型数组 p2=new inti5;/动态创建4行5列的二维整型数组 释放动态创建数组所占的内存空间时,应采用的形式是: delete 指针变量;,5.5 C+程序的结构,工程实践中一般采用多文件结构,来组织和管理一个规模较大的C+程序。每一个类的设计都对应两个文件,其中类的定义存放在头文件(.h)中,类的实现存放在源程序文件(.cpp)中,类的应用单独存放在一个源程序文件(.cpp

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号