C语言数组零基础入门:一维二维全讲透
知晓学C语言的友人都清楚数组是无法避开的关键知识点还是后续学习结构体、链表的根基。好多新手初次接触之际被一维数组、二维数组、字符数组弄得晕头转向就连冒泡排序、选择排序的逻辑都梳理不清楚。致使今日之这篇文章将C语言数组的核心知识点予以全面详尽之讲解由基础概念起始至实际代码从经典算法出发到规避陷阱之技巧全程以通俗易懂之方式论述即便毫无基础之人亦能够轻易理解明白故而应当收藏起来以便徐徐学习一、一维数组基础中的基础先吃透这几点数组的本质是那种存放相同类型且有序数据的连续内存容器一维数组它是最为基础的一种形式所有的操作都是围绕着下标来展开的核心知识点也就是这几个啦1. 定义与内存分配定义格式数据类型 数组名数组长度;比如int a;就是定义一个能存10个整数的数组。总的来说数组的内存大小是通过单个元素所占用的字节数乘以数组的长度来确定的就拿int类型来说它占用4个字节那么int类型的数组a就会占用40个字节在这种情况下使用sizeof函数能够快速地进行计算其核心公式是数组的长度等于用sizeof函数计算数组名所得到的结果除以用sizeof函数计算数组名所得到的结果这在编写代码的时候是必须要用到的知识2. 初始化的3个实用技巧数组在进行定义之时若是进行了赋值操作那么此行为便是初始化而那些没有被赋值的元素将会被自动设置为零。这里有三个技巧需要直接记住可省长度的全初始化int a{1,2,3}系统会自动确定长度为3。部分初始化极为便利定义一个整型变量a 使其初始化为包含0、1、2的集合当中其余七个元素全部为0。快速置0所有元素int a{0}开发中常用的小技巧。3. 核心注意下标从0开始C语言里数组是这样的情况只能逐个去引用其中的元素没办法进行整体的操作下标是从0开始的最后一个元素的下标是长度减去1就好比有个int类型的a数组它的元素是从a开始到a要是出现越界就会产生问题4. C99变长数组灵活定义长度C99所增添的变长数组能够准许运用变量来确定长度举例来说有int len 5; int a;这一种情况不过要留意在创建之后其长度是不可以更改的并且在定义的时候是不能够进行初始化的需要在后续通过循环来进行赋值。二、二维数组数组里套数组处理表格数据超合适就实际开发这个事儿存在着要去存储学生各科成绩还有矩阵此类等表格类数据的情况单单一维数组在这种情形下是不够用的二维数组它就是那种所谓的“数组中的数组”对于它你可以这样去理解使其等同于有着行和列的矩阵便可而这里面非常关键的知识点其实就只有2个核心。1. 定义与存储规则定义格式是数据类型数组名;举例来说int stu用来存储10个学生的3科成绩。请不要看虽然在逻辑方面呈现的是行与列然而在物理内存当中它依旧是连续的按照行来进行存储首先存储第一行的所有元素接着存储第二行依照这样的顺序逐一类推下去。2. 初始化铁律列长度绝对不能省二维数组进行初始化的时候存在分行以及线性这两种方式不管以怎样的形式去书写都是可行的然而其中列的长度一定得加以指定而行的长度则是能够省略的并且系统会自行进行计算。写成这样才对int a 等于 {1,2,3,4,5,6} 然后呢 系统会 自动地 确定 为 2行。写法错误的情况是这么写int a{1,2,3}它会直接导致编译的时候出现报错的情况新手朋友千万要注意别掉进这个坑里面引用元素也简单数组名行下标列下标比如stu就是第二个学生的第二科成绩。三、字符串呢它是C语言里的一种特殊存在还有字符数组也是在C语言里属于特殊存在而这里面的核心要点是得牢牢记住那个 \0。着重进行提示C语言不存在专门的那种字符串类型全体字符串无一例外都是借助字符数组予以存储的这一部分内容的关键要点便是要牢牢记住字符串结束符‘\0’要是缺少它必定会出现问题1. \0的关键作用内存里的字符串常量像hello这种其末尾会自动添加上\0此\0 的ASCII码是0它是C语言用来识别字符串结束的仅有标志它不算在字符串长度内不过却占据数组位置。比如说存放hello这个内容的时候字符数组的长度起码得是6要留出一个位置用来放置\0不然在进行输出的时候就会出现那种随机的“垃圾值”。2. 初始化与输入输出初始化字符数组存在着两种不一样的方式其中推荐使用字符串常量这种方式因为它会显得更为简洁并且在其末尾位置会自动补上一个 \0逐一进行赋值操作字符型变量ch被赋予这样几个值分别是单引号括起来的h单引号括起来的e单引号括起来的l单引号括起来的l单引号括起来的o以及反斜杠零。字符串常量char chhello;推荐在进行输入输出操作的时候不要采用循环的方式而是直接运用%s就像printf(%s, ch); 、scanf(%s, ch); 这样需要注意的是在scanf进行输入时数组名是不需要添加这个符号的并且当遇到空格的时候就会停止输入一个操作。要是打算输入带有空格的字符串采用scanf(%, ch) 或者fgets(ch, 长度, stdin) 便可以达成目的而后一种方式更为安全可靠。四、数组经典算法冒泡排序选择排序笔试高频考点数组倘若要学会排序必然是要掌握的冒泡排序以及选择排序是C语言里最为基础、最为常被考到的排序算法其适用于小规模的数据核心逻辑是简单的代码直接套用就可以了1. 冒泡排序相邻比较让最值“浮”到末尾关键要点是反复地去遍历数组将相邻的元素逐个进行两两比较一旦顺序出现错误那就进行交换每一回的遍历过程中都会把尚未排序的那部分里的最大值放置到末尾位置总共需要遍历长度减一轮这么多轮次。简言之便是要使得较大的数逐个逐次地“飘浮”至数组的末尾之处代码能够直接进行复制从而得以运行将升序排序更改一个符号便能够转变为降序。2. 选择排序找最值放到已排序区末尾核心思想是将数组划分成已排序的区域以及未排序的区域在每一轮当中要从无序列表里寻找最小值然后把这个最小值和未排序区域的第一个元素进行交换由此逐步地扩大已排序的区域而且同样需要进行遍历长度减一轮的操作。相较于冒泡排序而言选择排序的那种交换的次数是更少的其逻辑呢也是更为直观的处在新手阶段的人会更容易去理解。五、避坑必看数组使用的7个高频错误别再踩C语言针对数组是不会去做越界检查的新手只要稍微不留意就会致使程序出现崩溃的情况这7个坑点一定要牢牢记住从而避免踩到雷区下标越界始终记住下标从0开始最后一个元素是长度-1二维数组省列长度列长度必须写行长度可省别搞反要是字符数组没给\0预留位置那用来存放字符串的数组其长度必须得比实际字符串的长度大1。scanf输入字符串时加数组名本身就是地址所以不用加取地址符。还没进行初始化操作就直接使用数组那些没有被赋予值的数组元素呈现的是随机的垃圾值一旦使用就会出现错误的结果。变长数组在进行定义的时候初始化变长数组仅仅能够在后续的阶段进行赋值操作而在定义的这个时候是不可以进行初始化的。进行数组名直接赋值时数组名属于常量地址这一情况不可以采用ab这种方式为两个数组进行赋值。六、课后小练习学完就练巩固知识点只是单纯去看是没有用的关键在于动手去敲代码这里有5个小练习它们覆盖了数组全部的核心知识点学完之后要直接去练习。实现一维数组的逆序输出用数组存储斐波那契数列前20项并打印针对10个学生的成绩进行输入对其在0至100这个范围之内进行校验进而计算出总成绩以及平均分。用二维数组打印杨辉三角前10行定义二维字符数组统计每个字符出现的次数。总结那个被称作C语言数组的东西实际上并不算困难其最为关键的要点在于牢牢把握住**“相同类型、连续内存、下标操作”**这三个方面一维数组打基础记牢初始化和长度计算公式二维数组理解“行和列”记住列长度不能省字符数组的核心呀是那个被编码的特殊字符\0而涉及字符串的输入输出操作呢则是使用格式控制符%s。冒泡和选择排序吃透核心思想代码直接套用。在C语言里数组属于基础内容它还是接下来学习复杂数据结构的铺垫建议各位结合代码示例一次次反复去敲将每一个知识点都彻底掌握把容易出现问题的点牢牢记住如此一来往后写代码的时候就要轻松许多。最后当你学习C语言数组的时候碰到过哪些难题呢请在评论区说一说你的经历哦
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2514996.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!