新闻详情

新闻详情

首页 / 资讯中心 / 详情

数组的详细总结

发布时间:2026/9/28 13:02:56来源:尧图网络
数组的详细总结
一.什么是数组我们都知道想要将数据放入内存需要先创建合适的数据类型变量根据变量数据类型分配内存空间想要存入4个 int 类型数据则需要创建四个 int 类型变量。想想也能明白根据数据数量不停的创建变量这样的效率非常低也会让代码又臭又长。而数组完美解决了这个问题。数组Array顾名思义就是两个或者多个数据的集合它所包含的每一个数据叫做数组元素Element所包含的数据的个数称为数组长度Length数组中的每个元素都有一个序号这个序号从0开始而不是从我们熟悉的1开始称为下标Index所包含数组的里面元素的类型叫做数组类型Type。二.数组的创建数组可以有多种创建方式每种方式对应不同的应用场景。1.声明数组时指定数组的长度首先是数组最基础的创建方式示例#includestdio.h int main() { int a[10] { 0 }; return 0; }显而易见这里创建了一个可以储存十个 int 类型数据的数组 a 并初始化为0当数组的数据类型是 char 类型时需要注意不要漏掉 \n 否则造成内存访问越界产生未知的结果示例2#includestdio.h int main() { char a[3] { a,b,c }; printf(%s, a); return 0; }运行结果如下图所示当我们在 c 后方加入终止符时示例3#includestdio.h int main() { char a[4] { a,b,c,\0}; printf(%s, a); return 0; }运行结果如下图所示显而易见的加入 \0 后打印出来的就是正确的数组内容了。每个数组后面都要加入 \0 并且每一次初始化都要写很多引号和逗号这非常麻烦由此我们可以这样初始化示例4#includestdio.h int main() { char a[4] abc; printf(%s, a); return 0; }使用双引号的数组进行初始化在数组末尾默认存在终止符。注当[]内长度为变量时在部分编译器下报错部分编译器下正常运行。变长数组2.使用初始值初始化长度示例#includestdio.h int main() { char a[] abcd; printf(%s,a); return 0; }运行结果如下图所示当数组的值在开发时即已经确定时可以使用此语法比如在进行身份证最后一位的合法性验证时用到的校验码还有小写数字转中文大写数字时的大写数字都可以使用这个语法。3.使用动态方式为数组分配内存关键函数 malloc realloc示例#includestdio.h #includestdlib.h int main() { char* a (char*)malloc(sizeof(char) * 10); strcpy(a, abc); printf(%s, a); return 0; }运行结果如下图所示此方式可用于函数数组的返回由于在函数内定义的数组属于函数的局部变量在其它函数中无法访问此变量。使用malloc动态分配空间可解决此问题注动态内存分配需要一个内存管理程序记录内存的分配大小、释放节点、空余节点甚至添加一堆调试信息这些操作需要额外占用内存因此实际使用的物理内存会大于申请的内存空间。 其次频繁的不同长度的动态内存分配与释放可能造成内存碎片。三.二维及多维数组二维数组的声明格式二维数组逻辑表达示例#includestdio.h int main() { int a[2][3] { 1,2,3,4,5,6 }; return 0; }这里我们声明了一个两行三列、数据类型为 int 类型的数组。二维数组的本质也是数组只不过其中的数组元素也为数组多维数组亦是如此。注二维数组列上的数字可以省略但是表示行的数字不能省略。四.数组的储存方式逻辑结构线性。物理结构线性。物理结果证明#includestdio.h int main() { char a[20]; int b 0; while (b 20) { printf(%p\n, a[b]); b; } return 0; }运行结果如下图所示我们可以看出数组元素之间相距均为一可知数组元素在内存中按顺序线性排列。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Linux内存管理核心解析:虚拟内存、malloc与OOM Killer 2026/9/28 13:49:18

Linux内存管理核心解析:虚拟内存、malloc与OOM Killer

1. 为什么每个Linux学习者都要啃内存管理这块硬骨头我在接触Linux的前两年,一直觉得内存管理是内核开发者才会关心的事情,自己写点C代码、跑跑服务,内存这东西系统自己管不就行了?直到有一次我自己维护的一个后台服务莫名其妙被OO…

阅读更多 →
嘉立创EDA专业版原理图绘制全流程:从模块化布局到星型接地规划 2026/9/28 13:49:18

嘉立创EDA专业版原理图绘制全流程:从模块化布局到星型接地规划

做PCB设计这行也有十来年了,经手的板子从简单的电源小板到六层的高速核心板都碰过。这两年嘉立创EDA专业版用得多,几乎成了我新项目的主力工具。经常有刚入行的朋友问我:为啥我画的原理图别人看不懂、DRC一堆报错、转PCB的时候封装还老对不上…

阅读更多 →
Java类与对象:从JVM加载到new实例的底层全程解析 2026/9/28 13:49:18

Java类与对象:从JVM加载到new实例的底层全程解析

我面试过不少Java候选人,只要简历写了"熟悉Java基础",我几乎必问一个问题:说说类和对象的区别。得到的答案出奇一致:"类是一个模板,对象是模板创建出来的实例。"这句话不能算错,但也就…

阅读更多 →
MC6C六通道遥控器入门:从舵机PWM控制到Arduino/Pico实战 2026/9/28 13:49:18

MC6C六通道遥控器入门:从舵机PWM控制到Arduino/Pico实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
工业级AI工作台:本地化、可审计、多模态的生产力中枢 2026/9/28 13:49:05

工业级AI工作台:本地化、可审计、多模态的生产力中枢

1. 这不是又一个“AI玩具”,而是一套能真正替代ExcelPPT会议纪要的生产力中枢去年三月,我在给一家做工业设备预测性维护的客户做方案时,被逼到了墙角。他们每周要处理27台不同型号PLC的日志、3个传感器阵列的原始波形、5份第三方检测报告PDF&…

阅读更多 →
BM25在AI Agent中的实战应用:混合搜索与协同架构 2026/9/28 13:49:05

BM25在AI Agent中的实战应用:混合搜索与协同架构

1. 为什么一个30岁的老算法,突然在Agent浪潮里被集体翻牌?最近在几个AI工程师的闭门技术群里,连续三次听到有人问:“你们现在做搜索模块,还用BM25吗?”——不是“要不要用”,而是“还用吗”&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉