news 2026/5/5 5:45:45

C语言一维数组:别再把「储物柜」玩成俄罗斯套娃啦!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言一维数组:别再把「储物柜」玩成俄罗斯套娃啦!

学C语言最抓狂的瞬间:为了存10个学生成绩,硬是定义了score1到score10十个变量——代码写到手抽筋,还被老师吐槽「你这代码是裹脚布吗?」

别急!教你用一维数组轻松搞定:就像学校的连号储物柜,让数据整齐划一、管理有序。

一、数组是个啥?→ 一排连号储物柜

官方定义:相同类型元素的有序集合,内存里占连续空间

翻译成人话:

数组就是一排长得一模一样的储物柜,每个柜子只能放同一种东西(比如全放int成绩,或全放char名字),柜子按「0号、1号、2号…」编号,而且一个挨着一个站,绝不插队!

比如你定义一个int arr[5],就相当于跟系统说:「给我5个连在一起的int型储物柜,谢谢!」

二、怎么造储物柜?→ 创建与初始化

1. 基础创建语法

比如:

注意[]里必须是常量(比如5、10),不能写变量(比如int n=5; int arr[n];在老版本C里会报错,别问,问就是祖传规矩)。

2. 三种初始化方式(给柜子放东西)

完全初始化:每个柜子都塞满

部分初始化:只塞前几个,剩下的默认空(其实是0)

偷懒模式:不写柜子数,系统自己数

三、怎么找柜子里的东西?→ 下标与访问

1. 下标规则(重点!)

C语言规定:数组下标从0开始

比如arr[10]有10个柜子,编号是0~9,没有10号柜

要是你喊「arr[10]」,系统会翻个白眼:「哪来的10号?我报警了啊!」(这就是「下标越界」,程序直接崩)。

举个真实例子:

别问我为什么从0开始——问就是C语言祖师爷丹尼斯·里奇的「恶趣味」,习惯就好。

2. 批量访问柜子:循环走起

想打印所有柜子里的东西?用for循环挨个喊号:

想给柜子塞东西?用scanf往里面扔:

四、柜子在内存里咋站的?→ 连续存储的秘密

你以为柜子是散落在系统里的?错!它们是手拉手站成一排的连续空间!

比如int型数组,每个柜子占4字节,所以相邻柜子的「门牌号」(内存地址)差4:

输出会是这样:

&arr[0] = 844954664 &arr[1] = 844954668 // 比上一个多4 &arr[2] = 844954672 // 又多4 ...

这就是为什么数组访问快——知道第一个柜子的地址,就能直接算出任意柜子的位置,比翻字典还快!

五、不用数柜子数?→ sizeof帮你算长度

有时候忘了数组有几个柜子?别傻乎乎地数!用sizeof直接算:

想知道柜子总数?用总大小÷单个柜子大小

太方便了!数组长度调整后无需手动修改循环条件,比如将arr[10]改为arr[20]时,循环中的len会自动更新为20,简直是懒人福音!

六、实战练手:三个必刷题(做完你就是数组管理大师)

1. 数组逆置:把柜子里的东西倒过来放

比如[1,2,3,4,5][5,4,3,2,1],思路很简单:0号和最后一个换,1号和倒数第二个换…

2. 元素扩大2倍:每个柜子里的数×2

比如[1,2,3,4][2,4,6,8],遍历一遍乘2就行:

3. 二分查找:猜数字游戏的终极版

题目:在升序数组里找某个数,找到了打印下标,找不到说「没找到」。

比如你要找数字7,别傻乎乎地从第一个数到最后一个(效率低到爆),学「猜数字」:

先猜中间的数,大了就往左半区猜,小了就往右半区猜,每次砍一半!

避坑提示:算中间下标别写mid=(left+right)/2——万一left和right都是超大数,加起来会爆int!正确写法是:

完整代码:

总结一下(划重点!)

数组是同类型元素的连续集合,下标从0开始

sizeof(arr)/sizeof(arr[0])算数组长度,别数!

下标越界会崩程序,喊柜子号前先看有没有!

二分查找只适用于有序数组,无序的话别瞎用~

现在是不是觉得数组就是一排听话的小柜子?赶紧去敲那三个题练手,练完你就是宿舍里最会管储物柜的仔!

有问题评论区喊我,咱们下期聊二维数组(就是「储物柜墙」哦~)!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 5:37:33

FPGA篇---FPGA中的引脚约束文件与赋值

引脚约束文件:我们用一个生活中“对号入座”的例子,来循序渐进地讲清楚引脚约束文件。你可以把它理解成给芯片的每条“腿”分配具体任务,并规定好工作电压的说明书。第一步:为什么需要它?(解决“谁是谁”的…

作者头像 李华
网站建设 2026/5/5 5:37:32

终端AI工作流:四大工具集成与自动化实践指南

1. 项目概述:为什么我们需要终端里的AI? 如果你和我一样,每天的工作和生活都离不开命令行终端,那你肯定也经历过这样的场景:正在写一个脚本,卡在某个正则表达式上,于是你打开浏览器&#xff0c…

作者头像 李华
网站建设 2026/5/5 5:30:30

C++作业

1.判断是否是大小写字母#include <iostream> using namespace std;int main() {char c;cin >> c;if (c > A && c < Z) {cout << "BIG" << endl;} else if (c > a && c < z) {cout << "SMALL" &…

作者头像 李华
网站建设 2026/5/5 5:26:28

别再死记硬背了!用一张图搞懂ZLMediaKit的RTSP转RTMP/WebRTC核心流程

可视化拆解ZLMediaKit转流架构&#xff1a;从协议协商到数据封装的完整链路 第一次接触流媒体服务开发时&#xff0c;面对复杂的协议转换流程&#xff0c;很多开发者都会陷入代码细节的迷宫。ZLMediaKit作为一款支持RTSP、RTMP、WebRTC等多种协议的开源流媒体服务器&#xff0c…

作者头像 李华
网站建设 2026/5/5 5:25:29

Java小白如何快速玩转Redis?

大家都知道Redis的业务范围是非常广的&#xff0c;但是对于刚入行的小伙伴来说可能也就知道个缓存跟分布式锁。因为Redis的很多功能在一些小企业里&#xff0c;根本是用不到的&#xff0c;得等到并发量到了一定的程度&#xff0c;系统扛不住了&#xff0c;才会用到Redis那些高级…

作者头像 李华