第04章C数组与指针



《第04章C数组与指针》由会员分享,可在线阅读,更多相关《第04章C数组与指针(15页珍藏版)》请在装配图网上搜索。
1、,*,单击此处编辑母版标题样式,JAVA语言讲义,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,JAVA语言讲义,*,1,第四章 数组与指针,4.1 数组的概念与声明,4.1.1 数组的概念,数组是一个由类型相同的变量组成的线性序列。概念上,它如,同代数中的向量:,(a,1,a,2,.,a,n,),。,4.1.2 数组的声明,与简单变量一样,在使用前必须声明之。其声明形式如下:,int a10;/声明 a 是一个长度为10的整型数组,a是数组名;,数组a中元素的变量名以及它们的存储空间情况,如下所示
2、:,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,2,说明:,(1)数组中各元素的下标是从,0 n-1。即它们的变量名依次为:,a0、,a1、,a2、,a3、,a4、,a5、,a6、,a7、,a8、,a9;,通常,它们也被称为,“,下标变量,”,。,(2)数组中各元素所占用的存储单元,它们的地址是连续的(即地,址相邻)。如下所示:,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,+1,+2,+3,+4,+5,+6,+7,+8,+9,变量名:,地 址:,3,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,1,2,3,4,5,6,7,8,9,10,4.1.3
3、数组的初始化,是指:在数组声明时为其中所有的下标变量赋值。,int a10=1,2,3,4,5,6,7,8,9,10;,说明:,初始化的几种形式(参见,P.75),4,4.1.4 下标变量的引用,下标变量可以像简单变量一样地被使用,而且,元素的下标可以是,常量、变量、表达式。,例如:,ai=ai-1+1;,cinai;,coutai;等等。,注意:,引用数组名将表示对数组进行整体操作,除非作为,函数的参数或字符串时,否则,其他情况下,必须以引,用下标变量的方式来处理数组(如:赋值、输入、输出,等等操作)。,5,4.1.5 数组的基本操作,参见P.76,(1)数组元素的输入,(2)数组元素的输出
4、,(3)数组元素的求和,(4)求数组中的最小(大)元素的值,(5)求数组中的最小(大)元素的下标,6,4.1.6 数组的应用,数组主要用于存放并且处理一组类型相同的数据。,如:排序、检索等操作。,参见P.77/【例】4.3、4.4;,P.95/【例】4.13-4.14;,7,例,4,-,1,一维数组的排序(非递减),。,void main(,),int a,=79,97,68,77,89,84,62,55,78,98,79,67,85,71,65,80,100;,int i,j,k,x,temp,len,;,len=sizeof(a)/sizeof(int);,for(i=0;i,len-1,
5、;i+)/,该排序法被称为“选择排序”法,x=ai;k=i;,for(j=i+1;jx)x=aj;k=j;,temp=ai;,/ai与ak交换值,ai=ak;,ak=temp;,for(i=0;ilen;i+),cout,a i,t;,sizeof是运算符,其语法形式:,sizeof(数组名或变量名或类型名),运算结果为该数组或变量或类型所占内存的字节数。,8,例,4,-,2,对一,批,学生的百分制成绩,统计出,其中,100分、9099分、8089分、,09分的人数。,#define NUM 20,void main,(,),int score,NUM,;,/声明成绩数组score,int c
6、ounter,11,;/,/声明,计数器,数组counter,int i;,srand(,(unsigned)time(NULL),);,for(i=0;iNUM;i+),scorei,=(int)(rand()%101),;,/利用随机函数产生成绩,for(i=0;i,11,;i+)counteri=0;,/计数器数组counter置0,for(i=0;i,NUM,;i+)counter,scorei/10+;/,利用,counter,数组,计数,for(i=0;i,11,;i+),if(i!=10),cout,(i*10),-,(i*10+9),:,counter i,endl,;,els
7、e,cout,(i*10),:,counter i,endl,;,9,课外练习,关于一维数组,(1),阅读理解程序,P.76基本操作;,P.77/【例】4.3、4.4;,P.95/4【例】4.134.14;,(2),参见P.100,三、程序填空/1、2、3、5;,(3)编程序:,将一个已知数组a中的元素颠倒存放。,例如,原来为:(a1,a2,a3,a4,an),,处理后为:(an,an-1,a3,a2,a1)。,(4)编程序:输入n(n可变,但不超过20)个整数,输出它们的平均值以及所有超过平均值的数。,10,4.2 二维数组的概念与声明,4.2.1 二维数组的概念,4.2.3 二维数组的声明
8、,4.2.6 二维数组的基本操作,课外练习:p.104/四-1.,4.2.3 二维数组的声明,参见P.80,4.2.4 二维数组的内存情况,4.2.5 二维数组的初始化,11,4.3 字符数组与字符串,“字符串的内存情况”、“,处理,字符串的库函数”参见P.84,课外练习,参见P.100,二、读程序,写运行结果/2.,12,4.4 指针及其与数组的关系,4.4.4 指针与数组,参见P.87,4.4.1 指针的概念,参见P.35,4.4.2 指针的运算,4.4.3 利用指针动态申请和释放内存空间,运算符new与delete,4.4.5 指针与字符串,参见P.92,13,关于指针的一些说明及例子,
9、若有以下变量声明:int a=2,*p=&a;则两者的物理关系如下所示:,2,p,a,3f00e0,2,p,变量名:a,地址值:3f00e0,变量值:2,由于变量的地址值(&变量名)具体是多少,对程序而言,通常是无关紧要的。因此,两者的关系可以简单表示为:,14,p,a,1,称为p指向a,若有下面语句:,int a=1,*p;,p=,int a=1,*p=,等价与,则它们的物理关系可以如下图所示:,若接着执行下面语句:,a=2;,*p=3;,2,p,a,3,p,a,若接着执行:,couta=aendl;,cout*p=*pendl;,则输出:,由此可见,这时的*p与a,是等价的它也可以作为,变
10、量a的“名字”来使用!,a=3,*p=3,进一步而言,由于指针p也是变量,因此我们还,可以如下定义另一个指向指针变量p的指针变量q:,int *q=,这时,由于*q与p等价,因此*q 与*p、a就都是等价的了它们都可以作为变量a的“名字”来使用!,q,3,p,a,切记:,每当一个指针(p)指向一个变量(a)时,*指针名(*p)就相当于该变量(a)的一个,“,别名,”,也叫做:,通过指针(p)间接访问变量(a),!,15,pa,a,1,为什么声明指针时需要指定类型呢?而指针的类型又有什么作用呢?,我们来看下面的情况:,int a=1,*pa=,char ch=A,*pch=,pch,ch,A,pa,fa30,fa31,fa32,fa33,pch,fd60,fd61,在前面我们已经知道,指针pa、pch的值分别是变量a、ch的,首地址,而已,。那么每当遇到*pa、*pch时,系统是如何知道,pa指向的变量占用了4个字节、而pch指向的变量只占用了2,个字节呢?.这就是为什么声明指针时需要指定类型!,变量占用的字节地址,a,ch,切记:,每个指针可以指向相同类型的任何变量,但决不允许指向不同类型的变量!如:,int a,b,*p;,char ch;,p=/此时,p指向a,p=/现在,p指向b,p=/错误!不能指向ch,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。