当前位置: 首页 > article >正文

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语言数组的时候碰到过哪些难题呢请在评论区说一说你的经历哦

相关文章:

C语言数组零基础入门:一维二维全讲透

知晓学C语言的友人都清楚,数组是无法避开的关键知识点,还是后续学习结构体、链表的根基。好多新手初次接触之际,被一维数组、二维数组、字符数组弄得晕头转向,就连冒泡排序、选择排序的逻辑都梳理不清楚。致使今日之这篇文章&…...

python学习-07字典

1字典的基本概念字典{ }是Python中唯一映射性数据结构(由关键字和值组成):1. 字典定义:{key1:value, key2:value},key在字典中是唯一的;2. 字典是一种可变的容器模型,可以存储任意类型对象(元素可以是字典、列表、字符…...

从 “存得下” 到 “算得快”:工业物联网需要新一代时序数据平台

工业物联网领域,为什么数据库“只存数据”已经不够了? 以前,大多数工业企业在谈数据库时,关注点还非常集中:能不能把数据存下来?能不能扛住设备数量?写入吞吐够不够?于是&#xff0…...

Android14前台服务类型缺失异常解析与实战修复

1. Android14前台服务类型强制声明机制解析 最近在适配Android14时踩了个坑:原本运行良好的前台服务突然崩溃,抛出了MissingForegroundServiceTypeException异常。这个问题困扰了我整整两天,后来才发现是Android14新增的前台服务类型强制声明…...

OpenClaw v2026.4.12 功能介绍

最新版本: v2026.4.12(2026-04-13 发布) License: MIT一、核心定位OpenClaw 是一个私有化部署的个人 AI 助手,运行在你自己的设备上,通过你日常使用的消息渠道(微信、飞书、Telegram、Discord、…...

别只刷题了!从蓝桥杯EDA真题看硬件工程师的日常:电源、ADC、PCB散热到底怎么学?

从蓝桥杯EDA真题到真实硬件设计:电源、信号与PCB的工程思维跃迁 去年参与某智能家居项目时,我曾遇到一个典型的电源设计困境:当温控模块的MCU与继电器同时工作时,系统会出现周期性复位。经过三天排查,最终发现问题出在…...

【架构深度】RPA自动化+多线程高并发助力实现拼多多电商店群自动化运营

背景引入:自动化最怕的不是“跑不快”,而是“跑一半” 在主导过多个大型电商矩阵(拼多多、妙手 ERP 等)的自动化重构后,我发现 90% 的业务团队都会面临一个堪称噩梦的场景: 晚上 10 点,运营人…...

从零到CV算法工程师:25篇文章带你突破面试关

从零到CV算法工程师:25篇文章带你突破面试关一直有同学问我面试的事儿,我没急着写。因为面试这东西,说太细容易引发焦虑,而且每个人情况不同。 不过有些经验是通用的,今天分享给大家。 老板想招什么样的人 假如我是面试…...

【技术实战】基于 Python + RPA 构建高可用 ERP 自动化填表系统的架构解析(以妙手 ERP 为例)

背景引入:Web UI 自动化的普遍痛点 在电商开发领域,对接各大电商平台的 API 往往面临权限审批严格、调用频率受限等问题。因此,利用 RPA(机器人流程自动化)技术,基于浏览器前端 DOM 进行 UI 自动化操作&am…...

CS146S课程解析:LLM上限就是开发者的上限

第 6 周:AI 测试与安全 安全编码在 AI 时代变得更加重要。本周覆盖 SAST、DAST、漏洞检测、AI 生成的测试用例,以及如何用 Semgrep 等工具进行安全扫描。 第 7 周:现代软件支持 AI 代码审查、智能文档生成、调试辅助。如何建立对 AI 生成代码…...

RobotStudio避坑指南:ScreenMaker自定义界面常见6大报错解决(基于ABB 6.0+)

RobotStudio避坑实战:ScreenMaker自定义界面开发全链路解决方案 在工业机器人自动化领域,ABB的RobotStudio平台已成为工程师们不可或缺的开发工具。特别是其内置的ScreenMaker模块,让非专业程序员也能快速构建FlexPendant示教器的自定义操作界…...

从冯·诺伊曼到杨振宁:那些改变世界的科学家们,他们的故事与精神遗产

从冯诺伊曼到杨振宁:科学巨匠的精神图谱与当代启示 在人类文明的长河中,科学家的思想火花如同璀璨星辰,照亮了认知的边界。当我们回望二十世纪的科学版图,会发现一个令人惊叹的现象:那些真正改变世界的科学突破&#x…...

Android离屏渲染:从原理到性能优化的全景解析

1. 什么是Android离屏渲染? 离屏渲染(Offscreen Rendering)是图形处理中的一个重要概念。简单来说,当系统无法直接在屏幕上绘制某些复杂视觉效果时,会先在内存中创建一个临时缓冲区进行绘制,然后再将这个缓…...

别再让电机白费电了!手把手教你用MTPA算法在STM32上实现节能控制(附代码)

电机节能控制实战:基于STM32的MTPA算法实现与优化 电机控制系统中的能耗问题一直是工业应用中的痛点。传统控制方法往往忽视了电机内部磁阻转矩的潜力,导致电流利用率低下。本文将带你深入理解MTPA(最大转矩电流比)算法的核心思想…...

告别手写脚本!用Frida-Trace自动Hook Android App的Java方法(附实战Demo)

告别手写脚本!用Frida-Trace自动Hook Android App的Java方法(附实战Demo) 逆向分析Android应用时,手动编写Hook脚本往往耗时费力——尤其是面对未知应用,开发者需要反复尝试类名、方法签名,甚至逐行调试参数…...

如何用STM32CubeMX快速验证你的硬件设计:以UART通信为例

如何用STM32CubeMX快速验证你的硬件设计:以UART通信为例 在嵌入式开发中,硬件验证往往是最耗时且最容易出错的环节之一。想象一下,当你精心设计的电路板终于到手,却发现某个外设无法正常工作,那种挫败感足以让任何开发…...

可计算元认知:工程实现与封装说明——跨领域、跨语言文本对齐的开源工具箱

可计算元认知:工程实现与封装说明——跨领域、跨语言文本对齐的开源工具箱摘要本文系统记录可计算元认知框架的工程实现,提供完整的数据处理流水线、三步语义分析法(垂钓 → 撒网 → 熔炉)的代码实现、跨领域向量对齐的技术细…...

告别Swagger!用Apifox给苍穹外卖项目做接口测试,保姆级图文教程(含Token配置避坑)

从Swagger到Apifox:接口测试工具升级实战指南 在Java Web项目开发中,接口测试是不可或缺的一环。传统上,许多开发者习惯使用Swagger作为接口文档和测试工具,但随着项目复杂度提升,Swagger的局限性逐渐显现:…...

从曝光三要素到图像亮度:深入解析ISP中的AE算法核心

1. 从摄影三要素到数字图像处理 第一次拿起单反相机时,师傅教我的第一课就是"曝光三角":光圈、快门、ISO。这三个参数就像魔法旋钮,转动它们就能让照片变亮或变暗。但当我后来接触手机摄像头开发时,才发现这些物理参数在…...

JMeter实战:从零构建精准压力测试脚本

1. 压力测试入门:从概念到工具选择 第一次接触性能测试任务时,很多人会被各种专业术语搞得晕头转向。我刚入行那会儿也是这样,直到真正动手做了几个项目才明白,压力测试其实就是模拟真实用户对系统"施压"的过程。想象一…...

计算机视觉需要哪些数学基础?如何高效学习线性代数和概率论?|2024新手必看

计算机视觉需要哪些数学基础?如何高效学习线性代数和概率论?|2024新手必看 标签:#计算机视觉、#线性代数、#人工智能、#深度学习、#自然语言处理、#神经网络、#机器学习### 一、痛点引入:为什么很多人怕CV数学&#xf…...

.NET+AI | Agent Skills | File-based Agent Skills 帮你复用成千上万的开源技能

以下内容选自我精心打造的《.NETAI | 智能体开发进阶》课程,如需系统学习,不妨阅读原文了解详情。上一篇我们聊了 Inline Skill。它最大的优点是轻:写得快、调得快、验证也快,非常适合作为 Agent Skills 的第一站。但问题也很明显…...

STM32H743串口DMA+空闲中断实战:从MPU配置到HAL库‘锁’的坑,我都帮你踩完了

STM32H743串口DMA空闲中断实战:从MPU配置到HAL库状态机陷阱全解析 第一次将项目从STM32F407迁移到H743平台时,我遭遇了职业生涯中最诡异的调试经历——CubeMX生成的代码明明逻辑正确,串口却像中了邪一样时好时坏。深夜的实验室里,…...

基于STM32的智能宠物喂食系统设计与实现(完整项目)

基于STM32的智能宠物喂食系统设计与实现摘要针对传统宠物喂食方式繁琐、无法精准控制喂食量与喂食时间、缺乏实时状态监控、远程操控不便,难以满足现代宠物饲养精细化需求的痛点,本文设计一款基于STM32F103C8T6单片机的智能宠物喂食系统。系统以STM32F10…...

矩阵求逆算法的时间复杂度对比:从高斯消元到伴随矩阵法

1. 矩阵求逆:为什么我们需要关注时间复杂度 第一次接触矩阵求逆是在大学线性代数课上,当时只觉得这是个有趣的数学玩具。直到后来做图像处理项目时,我才真正意识到它的重要性——当我们需要解线性方程组或做坐标变换时,逆矩阵就像…...

别再只会sekurlsa::logonpasswords了:mimikatz的dpapi模块实战,解密Chrome密码和Windows凭据

深入探索mimikatz的DPAPI模块:解密Windows凭据与Chrome密码实战指南 在渗透测试和安全研究中,mimikatz早已成为提取Windows系统凭证的标配工具。大多数安全研究人员对sekurlsa::logonpasswords命令耳熟能详,却鲜少深入挖掘其更强大的功能模块…...

别再手搓代码了!用Webots 2023b快速搭建你的第一个机器人仿真环境(附官方Demo实操)

别再手搓代码了!用Webots 2023b快速搭建你的第一个机器人仿真环境(附官方Demo实操) 第一次打开Webots时,那个布满按钮的界面和复杂的场景树确实容易让人望而生畏。但别急着关掉软件——你可能不知道,这个看似复杂的仿真…...

基于STM32的智能家居安防系统设计与实现

1. 为什么选择STM32做智能家居安防系统 第一次接触STM32是在五年前的一个智能门锁项目上,当时就被它的性价比震惊了。相比常见的Arduino,STM32F103系列不仅价格相当(核心板不到20元),还自带12位ADC、多个定时器和USART…...

解决Simulink中S-Function模块缺失问题:以NREL FAST风力发电机模拟为例

1. 当Simulink提示S-Function模块缺失时该怎么办 遇到Simulink报错"S-Function模块不存在"时,很多工程师的第一反应是怀疑模型文件损坏。但根据我处理NREL FAST风力机模拟的经验,90%的情况其实是环境配置问题。就像你买了一台新电脑却打不开游…...

从无人机航拍到手机AR:聊聊相机标定为啥是三维重建的‘地基’

从无人机航拍到手机AR:相机标定如何成为三维重建的隐形支柱 当你用手机AR应用测量家具尺寸时,可曾想过为什么虚拟尺子能精准贴合现实物体?当无人机自动生成建筑三维模型时,又是什么保证了砖墙缝隙的毫米级还原?这些技术…...