版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 第2讲二维数组与指针 复习:一维数组与指针复习:一维数组与指针 (1) (1) 一维数组元素及其地址表示一维数组元素及其地址表示 (2) (2) 指向一维数组元素的指针指向一维数组元素的指针 (3) 函数的定义与调用函数的定义与调用 (4) 指针变量作函数参数指针变量作函数参数 (5) 数组名作函数参数数组名作函数参数 新内容:新内容: (1) (1) 二维数组的地址表示二维数组的地址表示 (2) (2) 指向二维数组的指针变量指向二维数组的指针变量 (3) (3) 二维数组的指针作函数参数二维数组的指针作函数参数 2 复习:一维数组元素及其地址表示复习:一维数组元素及其地址表示 int
2、a5 = 1, 2, 3, 4, 5 ; 元素元素 a0 a1 a2 a3 a4 地址地址 p=a; 元素元素 *p *(p+1) *(p+2) *(p+3) *(p+4) 地址地址 p p+1 p+2 p+3 p+4 地址地址 a a+1 a+2 a+3 a+4 元素元素 a0 a1 a2 a3 a4 p= 等价于等价于 指针变量指针变量p与数组名与数组名a 都表示数组的首地址都表示数组的首地址, 但数组名但数组名a是指针常量是指针常量, 而而p是指针变量是指针变量 4 复习:指向一维数组元素的指针复习:指向一维数组元素的指针 (1) p+合法合法, 但但a+不合法不合法, 因为因为a是地址
3、常量是地址常量, 不能改变不能改变, 而而p 是一个指针变量是一个指针变量, 可以改变可以改变 注意:注意: (2) 要注意指针变量的当前值,保证它指向数组中有效的元素要注意指针变量的当前值,保证它指向数组中有效的元素 (3) 注意指针变量的运算注意指针变量的运算 *p+ *(p+) 先取先取p所指向的变量,再使所指向的变量,再使p自加指向下一个变量自加指向下一个变量 (*p)+ 先取先取p所指向的变量,再使变量的值加所指向的变量,再使变量的值加1 *(p+) 与与*(+p)不同不同, *(+p)是先使是先使p自加指向下一个变量,再取其值自加指向下一个变量,再取其值 (4) 指针变量也可以加下
4、标指针变量也可以加下标 pi ai *(p+i) 5 #include #define n 6 void main( ) int an= 1, 3, 4, 6, 7, 9 ; int temp, m=(n-1)/2; int *p , *q , *t ; p=a; q=a+n-1; t=a+m; for( ; p=t; p+, q- ) temp=*p; *p=*q; *q=temp; for( p=a; pa+n; p+ ) printf(“% %3d”, *p ); printf(“n”); 1 3 4 6 7 9 a0 a1 a2 a3 a4 a5 a p 6 n a+5 q a+2 t
5、 9 1 7 3 6 4 2 m temp1 a+1 a+4 a+2 a+3 3 4 a+3 a+2 例例: :将数组将数组a a中的中的n n个数按相反顺序存放个数按相反顺序存放 6 二维数组的地址二维数组的地址 a0 a1 a2 l二维数组名二维数组名a表示表示二维数组的首地址二维数组的首地址, 也是也是第第0行的首地址行的首地址, a int *p; for( p=a0; pa0+12; p+) if ( (p-a0)%4=0 ) printf(“n”); printf(“%4d”, *p); 思考:思考: p=a; p= p=*a; p=*a0; 对对 对对 错错 错错 14 指向二维
6、数组元素的指针指向二维数组元素的指针 普通指针变量普通指针变量 int *p,可以指向整形数据或整型,可以指向整形数据或整型 数组元素。数组元素。 若使若使p不是指向整型变量,而是指向一个包含不是指向整型变量,而是指向一个包含m个个 元素的一维数组(即二维数组)。这时,如果元素的一维数组(即二维数组)。这时,如果p先先 指向指向a0(即(即p= int * * *p; p=a; 合法吗?合法吗? int x=36, * *q,* * *p; q= p= 36 2010 x 2048 p 20102026 a0 a1 a2 p是二级指针是二级指针, 它指向一个整型指针变量它指向一个整型指针变量q
7、, 而而q指向一个整型变量指向一个整型变量 a是一种地址表示方法是一种地址表示方法, a实际指向了第一重一实际指向了第一重一 维数组元素维数组元素a0,而,而 a0是第二重一维数组是第二重一维数组 a a00 a01 a02 a03 非法!非法! 16 指向二维数组元素的指针指向二维数组元素的指针 定义格式:类型名定义格式:类型名 (* *指针变量名)指针变量名)数组长度数组长度; int a34; int (* *p)4; p=a; p指向一个包含有指向一个包含有4个个 整型数据的一维数组整型数据的一维数组 合法!合法! 虽然在定义虽然在定义p的时候只用了一个的时候只用了一个* *,但,但p
8、实际上是一个二级指针变量实际上是一个二级指针变量 *p所指的对象是有所指的对象是有4个整形元素的数组,即个整形元素的数组,即p是指向一维是指向一维 数组的指针。数组的指针。p的值就是该一维数组的起始地址,的值就是该一维数组的起始地址,p不能不能 指向一维数组中的某个元素。指向一维数组中的某个元素。 17 指向二维数组的指针变量指向二维数组的指针变量 例:输出二维数组中的元素例:输出二维数组中的元素 #include void main( ) int a34=1,3,5,7,2,4,6,8,9,10,11,12; int (*p)4, i, j; p=a; for( i=0; i3; i+) f
9、or( j=0; j *(p+i)=ai = *(p+i)+j =ai+j = for( i=0; i=m; i+) j=n- -1- -i ; temp=xi ; xi=xj; xj=temp ; void main( ) int i , a6= 1, 3, 4, 6, 7, 9 ; inv1(a , 6 ); for( i=0; i6; i+ ) printf(“% %3d”, ai ); printf(“n”); a0 a1 a2 a3 a4 a5 x0 x1 x2 x3 x4 x5 1 3 4 6 7 9 maininv1 2 m 0 i 5 j 9 1 1 4 7 3 6 4 2 3
10、 例例: :将数组将数组a a中的中的n n个数按相反顺序存放个数按相反顺序存放 实参和形参都用数组名实参和形参都用数组名 20 例例: :实参用数组名实参用数组名, ,形参用指针变量形参用指针变量 #include void inv2(int *x , int n) int temp, m=(n- -1)/2; int *p , *i , *j ; i=x ; j=x+n- -1; p=x+m; for( ; i=p ; i+, j- ) temp=*i; *i=*j; *j=temp; void main( ) int i , a6= 1, 3, 4, 6, 7, 9 ; inv2(a ,
11、 6 ); for( i=0; i6; i+ ) printf(“% %3d”, ai ); printf(“n”); 1 3 4 6 7 9 a0 a1 a2 a3 a4 a5 a x a i 6 n a+5 j a+2 p inv2 9 1 7 3 6 4 2 m temp1 a+1 a+4 a+2 a+3 3 4 a+3 a+2 21 用指向数组的指针作函数参数用指向数组的指针作函数参数 一维数组名可以作函数参数传递,二维数组也可以。在一维数组名可以作函数参数传递,二维数组也可以。在 用指针变量作形参以接受实参数组名传递来的地址时,用指针变量作形参以接受实参数组名传递来的地址时, 有两种
12、方法:有两种方法: 1、用指向变量的指针变量、用指向变量的指针变量 2、用指向一维数组的指针变量、用指向一维数组的指针变量 例:有一个班,例:有一个班,3个学生,各学个学生,各学4门功课,计算总平均分数门功课,计算总平均分数 以及第以及第i个学生的成绩。个学生的成绩。 题目分析:编写两个用户自定义函数;用函数题目分析:编写两个用户自定义函数;用函数average求总求总 平均成绩,用函数平均成绩,用函数search找出并输出第找出并输出第i个学生的成绩。个学生的成绩。 22 #include void main( ) void average(float *p, int n); void se
13、arch(float (*p)4, int n); float score34=65,67,70,60,80,87,90,81,90,99,100,98; average(*score , 12); search(score , 2); void average(float *p, int n); float *p_end; float sum=0,aver; p_end= p+n-1; for( ; p=p_end ; p+) sum=sum+(*p); aver=sum/n; printf(“average=%5.2f n”,aver); void search(float (*p)4, int n); int i; printf(“第第%d个学生的成绩:个学生的成绩:”, n); for(i=0;i4;i+) printf(“%5.2f ”,*(*(p+n)+i); 实参用实参用*score,即,即 score0,也就是,也就是 &score00,将,将 score00的地址的地址 传递给指针变量传递给指针变量p, 使使p指向指向 score00. 形参形参p指向包含指向包含 4个元素的一维个元素的一维 数组的指针变数组的指针变 量。实参将变量。实参将变 量量score的值传的值传 给给p使使p指向指向
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理评估中的疼痛管理
- 护理研究中的跨文化研究方法
- 护理基本护理伦理学
- 2005年7月国开电大行政管理本科《城市管理学》期末纸质考试试题及答案
- 护理教学比赛活动推广
- 护理教学研究:方法与成果
- 护理团队冲突管理与解决
- 护理服务品牌建设
- 快手平台内容审核部招聘与面经
- 快递公司业务部经理的招聘全解
- 2026年陕西航空职业技术学院单招职业适应性测试题库带答案详解(能力提升)
- 2026年自贡市市本级招用高校毕业生从事公共服务(58人)笔试参考题库及答案解析
- 【2026年中考复习】全国中考物理真卷综合能力题100道(上)
- 2026年雨季安全驾驶试题及答案
- 高中历史必背阶段特征-2026届高三统编版历史一轮复习(选必融合)
- 2026年安徽工商职业学院单招职业技能测试题库带答案详解ab卷
- 2026年安徽工贸职业技术学院单招职业技能测试题库带答案详解(基础题)
- 纳税人员财会制度
- 中药学电子版教材
- GB/T 17478-2004低压直流电源设备的性能特性
- 机修钳工题库(初版)
评论
0/150
提交评论