C语言数组零基础教程:一维二维全讲透

张开发
2026/5/26 13:45:59 15 分钟阅读
C语言数组零基础教程:一维二维全讲透
明白C语言的友人都清楚数组是无法避开的关键知识点还是后续学习结构体、链表的根基。好多新手初次接触之际被一维数组混淆、二维数组混淆、字符数组弄得晕头转向就连冒泡排序、选择排序的逻辑都梳理不清楚。今儿这篇文章将C语言数组里的核心要点全给讲得非常透彻从基础的概念开始一路到实际的代码又从经典的算法再到避免踩坑的技巧全程都以通俗易懂的方式去讲解就算是毫无基础的人也能够轻轻松松地看懂把它收藏起来然后慢慢地去学习一、一维数组基础中的基础先吃透这几点相同类型、有序数据所存储于其中的连续内存容器这便是数组的本质一维数组作为最基础的形式围绕下标展开的也就是所有操作核心知识点即为这几个1. 定义与内存分配定义格式数据类型 数组名数组长度;比如int a;就是定义一个能存10个整数的数组。总内存等于单个元素字节数乘以长度的数组举例来说如果int型占用4个字节那么int类型的a就会占用40个字节通过使用sizeof能够快速进行计算其核心公式为数组长度等于sizeof括号内数组名除以sizeof括号内数组名这在编写代码时必定会用到2. 初始化的3个实用技巧数组在进行定义之时进行赋值此种行为便是初始化那些没有进行赋值的元素会自动被设为0这三个技巧直接记住int型的a被全初始化省长度其值为{1,2,3}系统会自动确定长度为3。部分初始化极为便利定义一个整型变量a其初始值设定为包含三个元素的集合分别是0、1、2而其余七个元素的值全部为0。快速置0所有元素int a{0}开发中常用的小技巧。3. 核心注意下标从0开始在C语言当中数组是这样的情况它只能逐个地去引用具体的元素而不能够进行整体的操作其下标起始于0对于最后一个元素来讲它的下标是数组长度减去1就好比定义了一个整型数组a其元素范围是从a到a要是出现越界的情况那就会产生问题4. C99变长数组灵活定义长度C99新增加的那种变长数组是允许使用变量来确定长度的就像这样举例来说有一个int类型的变量len被赋值为5还有一个int类型的变量a但是要注意在创建之后它的长度是不能改变的并且在定义的时候是不可以进行初始化操作的而是需要在后续通过循环来进行赋值。二、二维数组数组里套数组处理表格数据超合适于实际开展之中存储学生各个学科的成绩、矩阵这类表格样式的数据时一维数组已然无法满足需求二维数组是所谓的“数组当中的数组”将其理解为具备行与列的矩阵便可关键的知识点存在两个核心要点1. 定义与存储规则格式定义为数据类型数组名是这样的形式例如int stu 它被用来存储10个学生的3科成绩。先别看逻辑层面上指的是行与列在物理内存当中它实际上依旧是连续的是按照行来进行存储的先是存储第一行的所有元素接着再去存储第二行然后依照这样的顺序依次类推下去。2. 初始化铁律列长度绝对不能省二维数组初始化存在分行以及线性这两种方式不管以何种方式去写都是可行的然而列长度是一定要进行指定的行长度则能够省略掉最终系统会自行开展计算要是写对了应当是这样的将其写成 int a 等于那由 1、2、3、4、5、6 所构成的集合而系统会自动去确定为 2 行。不正确的做法是写成int a{1,2,3}这样直接进行编译就会出现报错情况刚入门的新手千万不要去踩这个坑引用元素也简单数组名行下标列下标比如stu就是第二个学生的第二科成绩。三、对C语言来说字符串跟字符数组是特殊的存在核心要点是要牢牢记住\0。要重点进行提醒C语言并不存在专门的字符串类型所有的字符串都是依靠字符数组来进行存储关于这一方面的核心要点就是要牢牢记住字符串结束符\0要是少了它必然会出现问题1. \0的关键作用像hello这样的用来表示字符串常量的内容在内存所处环境里其末尾会自动添加上这个是表示二进制值的转义字符且值特殊含义是字符结束符的‘\0’这个‘\0’的ASCII码是值为0的情况它是在C语言中用于识别字符串结束状态的具备唯一性质的标志它不被计算到字符串长度的数值范畴之内然而却占据数组的位置。比如说存储hello这个内容时字符数组的长度起码得是6要留出一个位置用来放置\0不然在进行输出操作的时候就会出现那种随机的“垃圾值”。2. 初始化与输入输出字符数组进行初始化存在着两种不同的方式其中推荐采用字符串常量这种方式因为它更为简洁并且在末尾的时候会自动补上 \0。进行逐个赋值操作其中字符变量ch被设定为等于包含单引号括起来的字符h单引号括起来的字符e单引号括起来的字符l,单引号括起来的字符l单引号括起来的字符o后面跟着八进制转义字符表示的空字符\0。字符串常量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这种方式给两个数组赋值。六、课后小练习学完就练巩固知识点仅仅是看是没有用处的关键在于动手去敲代码这五个小小的练习涵盖了数组的所有核心知识点学完之后要直接去练习实现一维数组的逆序输出用数组存储斐波那契数列前20项并打印依次输入十个学生的成绩对其进行零到一百范围的校验算出总成绩进而计算出平均分。用二维数组打印杨辉三角前10行定义二维字符数组统计每个字符出现的次数。总结C语言数组实则并非特别困难其关键所在便是牢牢把握住这“相同类型、连续内存、下标操作”这三个要点一维数组打基础记牢初始化和长度计算公式二维数组理解“行和列”记住列长度不能省字符数组的核心确切地说是那个字符‘\0’而字符串的输入输出所用到的是那个格式符%s。冒泡和选择排序吃透核心思想代码直接套用。C语言的基础是数组后续学习复杂数据结构的铺垫也是数组建议大家反复敲结合代码示例把每个知识点吃透把避坑点记牢以后写代码会轻松很多。最后你在学习C语言数组时段碰到过什么样的难题呀在评论区域说一说你的经历吧

更多文章