




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言中级培训七、再谈数组数组的概念是一种初级(语言级)形式的数据结构。数组的特点无名;连续;有序;等大小;个数固定(除了在堆上分配);数组的本质int A10;Ai=32;/此句说明了什么?充分使用了特点:首址 + 偏移量是对元素进行访问的手段,但不是唯一的手段。数组的初始化对字符数组初始化时,若指定元素个数,则编译器会自动加尾0,否则不加(若没有指定元素个数,则不加)。但若采用双引号初始化,则会加 。 char a110=a,b,c,d;char a2 = x,y,z;char a3 = sdfg;printf(%sn,a1);printf(%sn,a2);printf(%sn,a3);运
2、行结果:abcdxyz乱码sdfg函数中的数组不要以为函数尚未调用时,数组也没分配空间,若用参数为数组指定元素个数,等函数被调用时,形参就有值了,此时创建数组m和n都已确定,于是就写成:void user(int m,int n) char Amn; 但这样写是错误的。因为这段代码是编译器在编译时就为A数组“规划了”空间需求,尽管尚未真正分配空间。而变量的值未定,编译器无法得到需求信息,无法完成数组的编译 。其内幕就是:在内存的堆区,存放第一个元素的位置之前,开辟了一个int型的无名单元,用来存放元素个数,其地址的计算公式是:A - sizeof(int) 。所以,sizeof( A )会得到
3、A数组所占的总字节数。 但在静态区和栈区,则是将元素个数信息保存在“变量名表”中。 当用指针指向该数组时,指针无法保存这个信息,虽然可以访问到每个数组元素,但只知道地址,并不知道是在对数组操作。这正是数组与指针的区别。 数组知道自己有多少个元素多维数组的概念应用了嵌套原理的一维数组。数组不再是基本类型,而是一种组合类型,是基本类型的扩展 。可以断言: 在C语言中压根就没有多维数组!若将一维数组看作是一家一户的平房,它们排列成街道;那么二维数组就是一栋栋的楼房,每个门洞是各楼层住户的公共入口(行地址)。要访问某家住户,首先要找到哪栋楼(二维数组),然后确定是哪个门洞(行),最后再确定是哪层楼(列
4、元素)。C语言将多维数组的访问变成了多次的一维访问。A90A91A92A93A94A00A01A02A03A04. .一维数组A9一维数组A2一维数组A1一维数组A0. .int A105 ;A0A1A2A9. .二维数组的存储模式:C语言只能处理一维的数组. 对二维数组,C语言进行了“降维”处理。即将二维数组视为一个特殊的一维数组,它的每个元素都是个一维数组。这个数组和内嵌的一维数组依然满足一维数组的一切特点(无名,连续,等大小)。 也就是说,充当数组元素的内嵌一维数组是一种特殊的大元素,C 语言把它视为一种特殊类型来处理。从而解决了多维的难题。二维数组的三种视角: 若有 int a53;
5、可视为一个二维数组; 可视为由五个大元素组成的一维数组,每个元素的类型是 int3 型,称之为“一维数组类型”; 还可视为纯粹由15个整型元素组成的一维数组; 三种不同的视角,提供了不同的访问方法 。 但无论看作什么形式,它们在内存中的存储形式是一样的。对于“大元素”、“类型嵌套”还可以这样理解:使用typedef int D 10; 语句之后,再定义 D A ;就相当于int A10; 若定义 D B5;就相当于int B510; 经typedef定义的int 10就是用户自定义的一维数组类型。就是“大元素”的类型。画出二维数组的内存使用示意图。二维数组的内存一维数组 int A 10 ;
6、中的A等价于定义了一个指向元素的指针:int * const A;二维数组 int B3 4; 中的B等价于定义了一个指向一维数组为元素的指针: int (* const B)4;/指向二维数组的常指针更高维依次类推。、若定义一个二维数组 int B4 5; 说出以下三个表达式的含义: *(*(B+2)+0) *(B+2) B+2 B数组中第2行第0列元素的值。类型是int 。B数组中第3行的首址,仍是一维数组的首址。类型是int5。*( )的作用是将二维降为一维。 该表达式能计算出一个地址,就是B20的地址,但类型是int 5的,没降维。 /越界,但是编译器不检查。“打印杨辉三角形” 是一道
7、综合应用数组基本知识的典型例题。分析:杨辉三角形特点是每个元素都等于它正上方与左上方数之和,于是可以计算出除第一列第一行外的所有元素。如何设置第一列成为本题关键。利用二维数组可以对部分元素赋值的性质 ,对数组初始化:1 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 011 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 : : : : : :打印杨辉三角形(打印10行)即 int a 1010=1,1,1,1,1,1,1,1,1,1 ; 这样就可以得到第一列全1,其余全0的二维数组。字符数组应用例 输入一行字符,统计其中单词个数。分析:首先要定义一个数组
8、把一行字符装进去;再利用计数器对单词的个数计数。关键是什么时候开始计数。扫描该数组,若当前字符非空格,前一个字符也非空格,表示一个单词还没读完;若当前字符空格,前一个字符也是空格,表示一个单词还没开始;一个新单词的开始应该是当前字符非空格而前一个字符为空格,此时应该计数;一个单词读完时,不要重复计数。 I am a student.0#include #include void main() char string81; int i,num=0; gets(string);/scanf遇到空格就几位数。要想用 /scanf只能加循环。 for (i = 0;string i != 0;i+)
9、if (isalpha(string i )&(string i +1 = | string i +1 = 0) ) /isalpha()在ctype.h中 /意思是它是一个单词吗 num+; /* 下降沿触发*/ printf(There are %d words in the linen,num); 练习: 1 . 如何表示一个方阵的主副对角线?/aii 2 . 如何表示一个方阵的靠边的元素?矩阵呢? 3 . 如何表示一个方阵的不靠边的元素?/!() 4 . 如何打造一个单位方阵?/int a1010;/For()/aii;b=4321 取百位值 a=(b/100)%10) ?/善于写表达式相邻出现的多个字符串#include stdio.h#include string.h#include stdlib.hvoid main()char *s1 = China ;char *s2 =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年03月广东深圳市光明区科技创新局公开招聘专干5人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025年03月国家体育总局体育科学研究所公开招聘应届毕业生3人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 金刚石膜热沉材料项目风险分析和评估报告
- 超声波大口径井径检测设备项目安全风险评价报告
- 湖北省黄冈市浠水县2025年初三全国统一考试仿真卷(四)化学试题试卷含解析
- 柳州铁道职业技术学院《普通话口语表达技巧》2023-2024学年第一学期期末试卷
- QQ生态项目安全风险评价报告
- 贵阳人文科技学院《大学体育四瑜伽》2023-2024学年第一学期期末试卷
- 淮阴工学院《毛泽东思想和中国特色社会主义理论体系概论》2023-2024学年第一学期期末试卷
- 南京信息职业技术学院《空调冷热源工程》2023-2024学年第一学期期末试卷
- 听力筛查疾病演示课件
- 激光切割操作管理制度
- 保洁服务投标方案(技术标)
- 软件工程师生涯人物访谈报告
- 教科版科学六年级下册第二单元《生物的多样性》测试卷
- 邀请招标招标文件范本
- 国标-汽车筒式减振器尺寸系列及技术条件
- 硬件设计评审Checklist(含器件原理图堆叠布局PCB-checklist)
- 可填充颜色的地图(世界、中国、各省份)
- DB45∕T 2149-2020 公路边坡工程技术规范
- DB31T 684-2023养老机构照护服务分级要求
评论
0/150
提交评论