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

数组(三)

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

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

#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.jsqmd.com/news/299224/

相关文章:

  • Day52 >> 101、孤岛的总面积 + 102、沉默孤岛 + 103、水流问题 + 104、建造最大岛屿
  • 2026 年 1 月珠海烟酒礼品回收厂家推荐榜单:茅台/洋酒/冬虫夏草/燕窝鱼胶等名品高价回收,专业可靠、快捷变现之选
  • MinIO替代方案安全性对比:RustFS如何为数据筑牢防护墙?
  • HCIP笔记6--OSPF域外路由、特殊区域(stub、totally stub) - 指南
  • 快捷键:Ctrl+Shift+P打开命令面板
  • 内存-磁盘
  • 硬件异构性-cpu-gpu-npu
  • [驱动进阶——MIPI摄像头驱动(三)]rk3588+OV13855摄像头驱动加载过程详细解析第二部分——DPHY驱动+CSI驱动
  • Java 后端开发中 Service 层依赖注入的最佳实践:Mapper 还是其他 Service?
  • [驱动进阶——MIPI摄像头驱动(四)]rk3588+OV13855摄像头驱动加载过程详细解析第三部分——CIF驱动+SDITF驱动
  • 2026 年 1 月铝材加工设备与材料厂家推荐榜单:压块机、铝棒、铝管、研磨铝棒管、挤压棒、铝合金,飞象精铝等源头实力厂家全景解析
  • 基于机器学习的道路交通状态分析(代码+报告+数据)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 我们将讨论如何在 React 中使用表单单元素与 Reac
  • 数据变化(原始数据—数据清洗—特征工程)
  • Emacs 折腾日记(三十五)——归档
  • 2026 年 1 月投饵船厂家推荐排行榜,无人投饵船,自动投饵船,遥控投饵船,智能投料船,水产养殖自动化精准投喂解决方案精选
  • 2026 年 1 月液相色谱厂家推荐排行榜,色谱柱/液相色谱仪/二维液相色谱/UPLC/制备液相色谱,精准分离分析技术源头实力解析
  • xFUZZ: A Flexible Framework for Fine-Grained, Runtime-Adaptive Fuzzing Strategy Composition
  • The 45th ICPC Asia East Continent Final Contest部分题解
  • 2026 年 1 月古建瓦厂家推荐排行榜,中式古建瓦,园林古建瓦,仿古瓦定制,古建瓦供应,匠心传承与建筑美学融合之选
  • 5846345645
  • 624524
  • 【VLM】Visual Merit or Linguistic Crutch? 看DeepSeek-OCR
  • Go进阶之反射
  • 2026 年 1 月仿古瓦厂家推荐排行榜,中式仿古瓦,小青瓦仿古瓦,定制仿古瓦,古建屋面瓦公司推荐,甄选匠心工艺与耐久品质!
  • .bat脚本新建文件夹【项目结构】
  • 2026 年 1 月工业醇类及溶剂厂家推荐榜单:乙醇/无水乙醇/二丙酮醇/异丙醇/乙二醇/正丁醇/工业酒精/甲醇/醇酸漆稀释剂/丙二醇甲醚等源头实力厂家精选
  • 2025年教我学英语 - 穿、衣
  • 探索Matlab水下图像处理与GUI界面构建之旅
  • 快过年了 , 我就简简单单写一个总结吧 ! | 马年快乐 !