资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章第三章 数组与指针数组与指针第一部分 C+结构化程序设计金志刚 教授天津大学通信系3.1 3.1 数组数组问题:已知一个班5名学生某门课的成绩,请统计成绩高 于平均分的学生数。/不使用数组如果这个班有50名学生?/使用数组1. 数组 是一组具有相同名字、不同下标、个数固定的同 类型变量的集合。2. 数组元素 数组中的每个变量称为数组元素。3.1 3.1 数组数组3. 数组的类型 数组中数组元素的类型。4. 数组的维数 数组中各元素之间的相对位置由下标确定,如果用一个下标就可以确定元素的位置,称为一维数组,用两个下标 确定,称为二维数组, 。3.1 数组5. 数组的定义 一维数组的定义:数组名元素个数;二维数组的定义:数组名第1维大小第2维大小; 元素个数、第1维大小、第2维大小均为常量表达式。 二维数组中,元素的个数=第1维大小*第2维大小例:一维数组定义举例。int a5; 分配给数组 a 空间如下所示。数组 a数组元素下标 0 1 2 3 4数组元素名 a0 a1 a2 a3 a4 数组元素的下标必须是整型表达式,其值不能超出下标范围。例:int a5;a0=12; a1=a0+5; /正确a5=2; /错误例:将斐波那契数的前20项存入一个一维数组然后输出。#include void main( ) int a20;a0=0; a1=1;for(int i=2;ivoid main( ) double data34;for (int i=0; idataij; /不能写成: cindata;double sum;for (i=0; i void main( )const int N(5);int aN2=1,65,2,87,3,90,4,80,5,70; int sum(0), ave;for (int i=0; iave) cout void main( ) char str80=”C+ Programming Today”;char ch;int count (0), i(0);coutch;while (stri!=0)if(stri=ch) count+; i+;couta;/错误for(i=0;iai; /正确例: char str80;cinstr;coutstr;输入 : abc def str 数组的内容是: “abc0” 输入字符的个数要小于字符数组定义时的长度。 输出时,遇到第一个0输出结束。例: char str80=”I am a string.”;cout *指针变量名1, *指针变量名2,;3. 指针变量的类型 在指针变量中存放其地址的变量的类型,只能在指针变量中存放与其类型相同的变量的地址。例:int a=10,*p; p= /取变量a的地址赋给指针变量p 取变量地址运算符 取变量地址运算符 *p=20; /把20送入p所指变量,即a中b=*p+1; /等价于 b=a+1;q= w=p;coutvoid main( )int *p,a,b,c; /变量p被定义为指针变量a=5;b=6;p= /取c的地址送p*p=a+b; /a+b内容送p所指单元ccoutvoid main( ) double x10,*p;for (int i=0; ixi;for(p=x,i=1; i*p) p=x+i;coutvoid main( ) int x4=10,20,30,40; int *p=x;coutvoid main( ) int a34=1,2,3,4,5,6,7,8,9,10,11,12;int s,i,j;for(i=0;ivoid main( ) int a34=1,2,3,4,5,6,7,8,9,10,11,12;int s,*p=a0;while(p-a0*数组名元素个数;例: int *px10; /px为一维整型指针数组char *ps5; /ps为一维字符型指针数组3. 指针数组的初始化 例:char s1=“Basic”,s2=“Java”,s3=“C+”; char *ps=s1,s2,s3; 例1:对5个字符串按由小到大的顺序输出。3.5 3.5 动态内存分配与释放(动态内存分配与释放(1 1) 程序中定义的变量、数组,其对应的空间由系统在程序运行前预先分配。 如果在编写程序时不能确定要使用的数据空间的大小,可以安排在程序运行时根据需要动态申请内存空间。3.53.5动态内存分配与释放(动态内存分配与释放(2 2) 用 new 运算符动态申请内存空间,一般格式为:指针变量名 = new 类型名; /申请变量空间指针变量名 = new 类型名(初始值);指针变量名 = new 类型名n; /申请一维数组空间例: int *ptr1,*ptr2,*nptr,n; char *p;ptr1=new int; /申请一整型变量空间ptr2=new int(5); /申请一整型变量空间,并置初值p=new char80; /申请80个连续的字符型变量空间cinn;nptr=new intn; /申请n个连续的整型变量空间 若申请失败返回0,否则返回分配空间的首地址。3.53.5动态内存分配与释放动态内存分配与释放(3)(3) 动态申请到的内存空间当不再使用时应将其释放,用delete 运算符释放动态申请的空间,一般格式为:delete 指针变量名; /释放单个变量空间delete 指针变量名; /释放一维数组空间例: int *ptr1; char *p;ptr1=new int; p=new char80; :delete ptr1; delete p; (1)用 new 申请数组空间时不能进行初始化。(2)对申请到的空间在释放前不要将其地址弄丢,否则会出现“内存泄漏”。new和 delete运算符使用说明(1):例: int *p, a; p=new int7;p= /造成“内存泄漏” new和 delete运算符使用说明(2):(3)delete 只释放动态申请到的内存单元,相应指针变量不会有任何改变,安全的做法是将指针变量置为“空”。例: int *ptr1;ptr1=new int;:delete ptr1; / “指针悬挂” :*ptr1=15; /可以,但容易产生错误(4)每个new运算符创建的内存单元,只能用delete释放一次。但指针变量置为“空”时多次释放也不会出错。例:求 n 个数的平均值( n 由键盘输入)。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号