您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > c++数组、指针与字符串
第六章数组指针与字符串成都信息工程学院计算机系C++语言程序设计C++语言程序设计成都信息工程学院计算机系2本章主要内容数组指针动态存储分配指针与数组指针与函数字符串C++语言程序设计成都信息工程学院计算机系3数组的概念数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。数组属于构造类型。数组C++语言程序设计成都信息工程学院计算机系4一维数组的声明与引用一维数组的声明类型说明符数组名[常量表达式];例如:inta[10];表示a为整型数组,有10个元素:a[0]...a[9]引用必须先声明,后使用。只能逐个引用数组元素,而不能一次引用整个数组例如:a[0]=a[5]+a[7]-a[2*3]数组名的构成方法与一般变量名相同。数组C++语言程序设计成都信息工程学院计算机系5例6.1一维数组的声明与引用#includeiostreamusingnamespacestd;intmain(){intA[10],B[10];inti;for(i=0;i10;i++){A[i]=i*2-1;B[10-i-1]=A[i];}数组for(i=0;i10;i++){coutA[i]=A[i];coutB[i]=B[i]endl;}}C++语言程序设计成都信息工程学院计算机系6一维数组的存储顺序数组元素在内存中顺次存放,它们的地址是连续的。例如:具有10个元素的数组a,在内存中的存放次序如下:数组名字是数组首元素的内存地址。数组名是一个常量,不能被赋值。a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a数组C++语言程序设计成都信息工程学院计算机系7一维数组的初始化可以在编译阶段使数组得到初值:–在声明数组时对数组元素赋以初值。例如:staticinta[10]={0,1,2,3,4,5,6,7,8,9};–可以只给一部分元素赋初值。例如:staticinta[10]={0,1,2,3,4};–在对全部数组元素赋初值时,可以不指定数组长度。例如:staticinta[]={1,2,3,4,5}数组C++语言程序设计成都信息工程学院计算机系8#includeiostreamusingnamespacestd;intmain(){inti;staticintf[20]={1,1};//初始化第0、1个数for(i=2;i20;i++)//求第2~19个数f[i]=f[i-2]+f[i-1];for(i=0;i20;i++)//输出,每行5个数//{if(i%5==0)coutendl;cout.width(12);//设置输出宽度为12coutf[i];}}例:用数组来处理求Fibonacci数列问题C++语言程序设计成都信息工程学院计算机系9例:用数组来处理求Fibonacci数列问题运行结果:11235813213455891442333776109871597258441816765C++语言程序设计成都信息工程学院计算机系10一维数组应用举例循环从键盘读入若干组选择题答案,计算并输出每组答案的正确率,直到输入ctrl+z为止。每组连续输入5个答案,每个答案可以是'a'..'d'。数组#includeiostreamusingnamespacestd;intmain(){charkey[]={'a','c','b','a','d'};charc;intques=0,numques=5,numcorrect=0;coutEnterthenumquesquestiontests:endl;while(cin.get(c)){if(c!='\n')if(c==key[ques]){numcorrect++;cout;}elsecout*;else{coutScorefloat(numcorrect)/numques*100%;ques=0;numcorrect=0;coutendl;continue;}ques++;}}11运行结果:acbba**Score60%acbadScore100%abbda***Score40%bdcba*****Score0%12C++语言程序设计成都信息工程学院计算机系13二维数组的声明及引用数据类型标识符[常量表达式1][常量表达式2]…;例:inta[5][3];表示a为整型二维数组,其中第一维有5个下标(0~4),第二维有3个下标(0~2),数组的元素个数为15,可以用于存放5行3列的整型数据表格。数组C++语言程序设计成都信息工程学院计算机系14存储顺序按行存放,上例中数组a的存储顺序为:二维数组的声明类型说明符数组名[常量表达式][常量表达式]例如:floata[3][4];a00a01a02a03a10a11a12a13a20a21a22a23a[0]——a00a01a02a03a[1]——a10a11a12a13a[2]——a20a21a22a23a可以理解为:引用例如:b[1][2]=a[2][3]/2下标不要越界二维数组的声明及引用数组C++语言程序设计成都信息工程学院计算机系15将所有数据写在一个{}内,按顺序赋值例如:staticinta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};分行给二维数组赋初值例如:staticinta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};可以对部分元素赋初值例如:staticinta[3][4]={{1},{0,6},{0,0,11}};二维数组的初始化数组C++语言程序设计成都信息工程学院计算机系16数组作为函数参数数组元素作实参,与单个变量一样。数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首地址。对形参数组的改变会直接影响到实参数组。数组C++语言程序设计成都信息工程学院计算机系17例6-2使用数组名作为函数参数主函数中初始化一个矩阵并将每个元素都输出,然后调用子函数,分别计算每一行的元素之和,将和直接存放在每行的第一个元素中,返回主函数之后输出各行元素的和。数组#includeiostreamusingnamespacestd;voidRowSum(intA[][4],intnrow){intsum;for(inti=0;inrow;i++){sum=0;for(intj=0;j4;j++)sum+=A[i][j];coutSumofrowiissumendl;A[i][0]=sum;}}18intmain(){intTable[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};for(inti=0;i3;i++){for(intj=0;j4;j++)coutTable[i][j];coutendl;}RowSum(Table,3);for(inti=0;i3;i++)coutTable[i][0]}19运行结果:123423453456Sumofrow0is10Sumofrow1is14Sumofrow2is1810141820C++语言程序设计成都信息工程学院计算机系21对象数组声明:类名数组名[元素个数];访问方法:通过下标访问数组名[下标].成员名数组C++语言程序设计成都信息工程学院计算机系22对象数组初始化数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。通过初始化列表赋值。例:PointA[2]={Point(1,2),Point(3,4)};如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数)。数组C++语言程序设计成都信息工程学院计算机系23数组元素所属类的构造函数不声明构造函数,则采用默认构造函数。各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。当数组中每一个对象被删除时,系统都要调用一次析构函数。数组C++语言程序设计成都信息工程学院计算机系24例6-3对象数组应用举例//Point.h#if!defined(_POINT_H)#define_POINT_HclassPoint{public:Point();Point(intxx,intyy);~Point();voidMove(intx,inty);intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};#endif数组//6-2.cpp#includeiostreamusingnamespacestd;#includePoint.hPoint::Point(){X=Y=0;coutDefaultConstructorcalled.endl;}Point::Point(intxx,intyy){X=xx;Y=yy;coutConstructorcalled.endl;}Point::~Point(){coutDestructorcalled.endl;}voidPoint::Move(intx,inty){X=x;Y=y;}25#includeiostream#includePoint.husingnamespacestd;intmain(){coutEnteringmain...endl;PointA[2];for(inti=0;i2;i++)A[i].Move(i+10,i+20);coutExitingmain...endl;return0;}26运行结果:Enteringmain...DefaultConstructorcalled.DefaultConstructorcalled.Exitingmain...Destructorcalled.Destructorcalled.27C++语言程序设计成都信息工程学院计算机系28关于内存地址内存空间的访问方式–通过变量名访问–通过地址访问地址运算符:&例:intvar;则&var表示变量var在内存中的起始地址C++语言程序设计成都信息工程学院计算机系29声明例:staticinti;staticint*i_pointer=&i;指向整型变量的指针概念指针:内存地址,用于间接访问内存单元指针变量:用于存放地址的变量20003i_pointer*i_pointeri2000内存用户数据区变量i变量j变量i_pointer362000200020043010引用例1:i=3;例2:*i_pointer=3;指针指针变量的概念C++语言程序设计成都信息工程学院计算机系30语法形式存储类型数据类型*指针名=初始地址;例:int*pa=&a;注意事项–用变量地址作为初值时,该变量必须在指针初始化之前已说明过,且变量类型应与指针类型一致。–可以用一个已赋初值的指针去初始化另一个指针变量。–不要用一个内部auto变量去初始化static指针。指针指针变量的初始化C++语言程序设计成都信息工程学院计算机系31指针变量的赋值运算指针名=地址“地址”中存放的数据类型与指针类型必须相符。向指针变量赋的值必须是地址常量或变量,不能是普通整数。但可以赋值为整数0,表示空指针。指针的类型是它所指向变量的类型,而不是指针本身数据值的类型,任何一个指针本身的数据值都是unsignedlongint型。允许声明指向void类型的指针。该指针可以被赋予任何类型对象的地址。例:void*general;指针C++语言程序设计成都信息工程学院计算机系32例6-5指针的声明、赋值与使用#includeiostreamusingnamespacestd;intmain(){int*i_pointer;//声明int型指针i_pointeri
本文标题:c++数组、指针与字符串
链接地址:https://www.777doc.com/doc-3972280 .html