数组(三)

一、二维数组在内存中的存储

像一维数组,一样我们如果想研究二维数组在内存中的存储方式,我们也是可以打印数组所有元素的地址的,代码如下(可自行验证):

#include<stdio.h>
int main() {
int arr[3][5] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++) {
for (j = 0; j < 5; j++) {
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
return 0;
}

从运行结果可以看出,二维数组中的每个元素都是连续存放的。

二、C99中的变长数组(简称VLA)

在C99之前,C语言在创建数组的时候,数组的大小只能使用常量、常量表达式或者如果我们初始化数据的话可以省略数组的大小,这样的语法限制,让我们创建数组时不够灵活,有时候数组大了浪费空间,小了不够用。

C99给定一个变长数组(variable-length array,简称VLA)的新特性允许我们使用变量指定数组的大小。

例如:

int n = a + b;

int arr[n];

上面示例中数组arr是变长数组,因为它的长度取决于变量n的值,编译器无法事先确定,只有运行时才知道n是多少,变长数组的根本特征就是数组长度只有运行时才能确定,所以变长数组不能初始化,它的好处是程序员不必在开发时随意一维数组指定一个估计的长度,程序可以在运行时为数组分配精确的长度,有一个比较迷惑的点,变长数组的意思是数组的大小是可以使用变量来指定的在程序运行的时候根据变量的大小指定数组的元素个数,而不能说数组的大小是可变的,数组的大小一旦确定就不能再变化,遗憾的是在vs 2022上虽然支持大部分C99的语法,但是不支持C99中的变长数组,没有办法进行测试。

三、数组练习

3.1:练习一:多个字符从两端移动,向中间汇聚

编程题:多个字符从两端移动,向中间汇聚

代码如下(可自行测试):

#include<stdio.h>
int main() {
char a1[] = "welcome to hunan...";
char a2[] = "###################";
int l = 0;
int r = strlen(a1) - 1;
printf("%s\n", a2);
while (l <= r) {
Sleep(1000);
a2[l] = a1[l];
a2[r] = a1[r];
l++;
r--;
printf("%s\n", a2);
}
return 0;
}

3.2:练习二:二分查找

二分查找(又称折半查找)是一种在有序数组中快速查找目标值的算法。

核心思想: 每次比较数组中间的元素与目标值: 如果相等,查找成功; 如果中间值太大,就在左半部分继续找; 如果中间值太小,就在右半部分继续找。如此反复,每次将查找范围缩小一半。

代码附在最后,可自行验证

#include<stdio.h>
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int len = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = len - 1;
int key = 7;
int find = 0;
int mid = 0;
while (left <= right) {
mid = (left + right) / 2;
if (arr[mid] > key) {
right = mid - 1;
}
else if (arr[mid] < key) {
left = mid + 1;
}
else {
find = 1;
break;
}

}
if (1 == find) {
printf("找到了,下标是%d\n", mid);
}
else {
printf("找不到\n");
}
return 0;
}

感谢你阅读这篇关于C语言二维数组的入门指南!希望这篇文章能帮你打牢基础、理清概念。编程之路,贵在实践与交流——如果你有任何疑问、建议,或者想分享你的学习心得,欢迎在评论区留言!也别忘了关注我的博客,我会持续更新更多通俗易懂、干货满满的编程教程。让我们一起在代码的世界里不断进步,共同成长!🌟

下一期预告:《单身狗编程题》即将上线,深入更多实用技巧与经典案例!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1215444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day52 >> 101、孤岛的总面积 + 102、沉默孤岛 + 103、水流问题 + 104、建造最大岛屿

代码随想录-图论Part3 101、孤岛的总面积 package test.java;import java.util.*;public class dfsPart3 {private static int count 0;private static final int[][] dir {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};private static void bfs(int[][] grid, int x, int y) {Queue…

2026 年 1 月珠海烟酒礼品回收厂家推荐榜单:茅台/洋酒/冬虫夏草/燕窝鱼胶等名品高价回收,专业可靠、快捷变现之选

2026 年 1 月珠海烟酒礼品回收厂家推荐榜单:茅台/洋酒/冬虫夏草/燕窝鱼胶等名品高价回收,专业可靠、快捷变现之选 随着社会经济活动的日益频繁和消费观念的不断升级,礼品馈赠已成为商务往来与情感维系的重要纽带。随…

MinIO替代方案安全性对比:RustFS如何为数据筑牢防护墙?

MinIO替代方案安全性对比:RustFS如何为数据筑牢防护墙? 存储安全的核心不是“功能多全”,而是“方案能匹配自身风险,且团队能落地执行”——MinIO迁移时,很多团队陷入“追全量安全功能”的误区,最终要么因配置复…

HCIP笔记6--OSPF域外路由、特殊区域(stub、totally stub) - 指南

HCIP笔记6--OSPF域外路由、特殊区域(stub、totally stub) - 指南2026-01-25 18:57 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !i…

快捷键:Ctrl+Shift+P打开命令面板

核心作用命令面板相当于一个 “功能总菜单”&#xff0c;你可以通过输入关键词快速搜索并执行 VS Code 的所有功能&#xff0c;无需在各级菜单中点击查找&#xff0c;大幅提升操作效率。常见用途&#xff08;结合你的 ESP32 开发场景&#xff09;执行开发命令&#xff1a;输入E…

内存-磁盘

1. DRAM内存 - dynamic random access memory&#xff0c;动态随机存取存取器2. L2二级缓存 - Level 2 cache3. SLC系统级缓存 - System Level cache&#xff0c;也常称为三级缓存 (L3 Cache)4. VRAM显存 - video random access memory&#xff0c;视频随机存取存储器5. GMEM -…

硬件异构性-cpu-gpu-npu

npu简介&#xff1a;https://www.zhihu.com/question/346062227 高通骁龙命令规则&#xff1a;https://zhuanlan.zhihu.com/p/1979915511929275517

[驱动进阶——MIPI摄像头驱动(三)]rk3588+OV13855摄像头驱动加载过程详细解析第二部分——DPHY驱动+CSI驱动

上一篇文章已经讲解过摄像头数据流动环节的第一部分——sensor驱动&#xff0c;接下来进行剩余部分的讲解&#xff0c;本篇文章进行DPHY驱动和CSI驱动加载过程的解析&#xff1a;Sensor (OV13855) ➔ DPHY (物理层) ➔ CSI Host (控制器) ➔ VICAP(CIF) ➔ ISP驱动源码解析&…

Java 后端开发中 Service 层依赖注入的最佳实践:Mapper 还是其他 Service?

前言 在 Java 后端开发中&#xff0c;采用经典的三层架构&#xff08;Controller - Service - DAO/Mapper&#xff09;是业界广泛接受的工程实践。这种分层结构通过职责分离&#xff0c;提升了代码的可维护性、可测试性和可扩展性。 然而&#xff0c;在实际开发过程中&#xff…

[驱动进阶——MIPI摄像头驱动(四)]rk3588+OV13855摄像头驱动加载过程详细解析第三部分——CIF驱动+SDITF驱动

上一篇文章已经讲解过摄像头数据流动环节的第二部分——DPHY驱动CSI驱动&#xff0c;接下来进行剩余部分的讲解&#xff0c;本篇文章进行CIF驱动SDITF驱动加载过程的解析&#xff1a;Sensor (OV13855) ➔ DPHY (物理层) ➔ CSI Host (控制器) ➔ VICAP(CIF) ➔ ISPSDITF是依附于…

2026 年 1 月铝材加工设备与材料厂家推荐榜单:压块机、铝棒、铝管、研磨铝棒管、挤压棒、铝合金,飞象精铝等源头实力厂家全景解析

2026 年 1 月铝材加工设备与材料厂家推荐榜单:压块机、铝棒、铝管、研磨铝棒管、挤压棒、铝合金,飞象精铝等源头实力厂家全景解析 随着高端制造业向精密化、智能化方向持续演进,铝材作为现代工业的“骨骼”与“肌肉…

基于机器学习的道路交通状态分析(代码+报告+数据)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于机器学习的道路交通状态分析(代码报告数据)(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码1、本项目利用关联规则算法挖掘分析影响交通状况的原因&#xff0c;再利用随机森林算法完成交通状况预测。 2、由于计算机科学的快…

我们将讨论如何在 React 中使用表单单元素与 Reac

React 表单与事件 本章节我们将讨论如何在 React 中使用表单。 HTML 表单元素与 React 中的其他 DOM 元素有所不同,因为表单元素生来就保留一些内部状态。 在 HTML 当中&#xff0c;像 <input>, <textarea>, 和 <select> 这类表单元素会维持自身状态&…

数据变化(原始数据—数据清洗—特征工程)

数据清洗步骤 用户行为数据缺失值处理 user_id、item_id是关联用户和商品的唯一标识&#xff0c;缺失后无法建立有效关联behavior_type是核心行为标签&#xff0c;缺失无法定义交互类型timestamp是时间序列分析的基础&#xff0c;缺失影响序列特征的准确性直接删除比填充更可靠…

Emacs 折腾日记(三十五)——归档

在前几篇文章中,我们经历了 GTD 流程中的收集想法、制定计划、以及执行和记录计划的过程,现在我们继续后续的流程,也就是最后的回顾和归档。 当日回顾 在我个人实践 GTD 的流程中,前一晚会做这些事情:回顾一下今天…

2026 年 1 月投饵船厂家推荐排行榜,无人投饵船,自动投饵船,遥控投饵船,智能投料船,水产养殖自动化精准投喂解决方案精选

2026年1月投饵船厂家推荐排行榜:水产养殖自动化精准投喂解决方案精选 随着全球水产养殖业向集约化、智能化方向加速转型,传统依赖人工作业的投喂模式正面临效率瓶颈、成本高企与精准度不足等多重挑战。在此背景下,以…

2026 年 1 月液相色谱厂家推荐排行榜,色谱柱/液相色谱仪/二维液相色谱/UPLC/制备液相色谱,精准分离分析技术源头实力解析

2026 年 1 月液相色谱厂家推荐排行榜:色谱柱/液相色谱仪/二维液相色谱/UPLC/制备液相色谱,精准分离分析技术源头实力解析 在生命科学、药物研发、食品安全、环境监测等众多前沿与基础研究领域,液相色谱技术作为不可…

xFUZZ: A Flexible Framework for Fine-Grained, Runtime-Adaptive Fuzzing Strategy Composition

概要:现有灰盒模糊测试工具要么策略固定、要么只能整工具切换,无法随目标程序和测试阶段 的变化而细粒度、运行时地调整策略;我们提出 xFUZZ,首次把输入调度、变异调度等核 心组件全部做成可热插拔的插件,并用滑动…

2026 年 1 月古建瓦厂家推荐排行榜,中式古建瓦,园林古建瓦,仿古瓦定制,古建瓦供应,匠心传承与建筑美学融合之选

2026年1月古建瓦厂家推荐排行榜:中式古建瓦、园林古建瓦、仿古瓦定制与供应的匠心之选 在当代建筑文化复兴与文旅产业蓬勃发展的浪潮下,古建瓦作为承载中式建筑灵魂的重要构件,其市场需求持续升温。无论是历史古迹的…