news 2026/4/23 14:42:27

数组(三)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数组(三)

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

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

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

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


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

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

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

作者头像 李华
网站建设 2026/4/23 8:30:43

Go进阶之反射

Go语言是静态类型语言.比如int float32 []byte32等等.每个变量都有一个静态类型.并且在编译的时候就已经确定了.type Myint int var i int var j Myint变量i和j不是相同类型.因为二者拥有不同的静态类型.尽管二者底层的类型都是int.但在没有类型转换的情况下是不可以相互赋值的…

作者头像 李华
网站建设 2026/4/23 8:30:43

智能声光感应窗帘系统设计

目录智能声光感应窗帘系统概述核心功能模块技术实现要点应用场景与优势扩展功能源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;智能声光感应窗帘系统概述 智能声光感应窗帘系统结合声音识别与光照传感器技术&#xff0c;通过自动化控制…

作者头像 李华
网站建设 2026/4/23 8:30:45

宝塔面板一键部署 Emlog 教程:从服务器准备到站点上线全攻略

文章目录宝塔面板一键部署 Emlog 教程&#xff1a;从服务器准备到站点上线全攻略一、宝塔面板简介二、部署前准备三、宝塔面板安装1. 下载并执行安装脚本2. 访问宝塔面板四、宝塔面板一键部署 Emlog1. 搜索并选择 Emlog2. 填写部署信息3. 部署完成与访问4. 设置管理员账号五、部…

作者头像 李华
网站建设 2026/4/23 8:30:48

微积分:世界是用“微分”写成的,我们是用“积分”读懂的

——试着不用符号理解微积分 &#x1f343; 01. 世界是连续变化的 温度不是“突然 5℃”&#xff0c;而是慢慢升的 汽车不是“瞬间到 60 km/h”&#xff0c;而是一点点加速 树不是“咻”一下长高&#xff0c;而是毫米级地生长 河水不是“啪”地冲过去&#xff0c;而是持续…

作者头像 李华
网站建设 2026/4/23 9:53:43

警惕 Shell 脚本中的逻辑陷阱:|| 替代 if-else 引发的安全漏洞

在 Shell 脚本编写中&#xff0c;开发者为了追求简洁&#xff0c;常使用 && 与 || 的短路组合逻辑替代结构化的 if-else 语句。这种看似便捷的写法&#xff0c;实则隐藏着极易被忽视的逻辑陷阱。本文将深入剖析这两种逻辑的核心差异&#xff0c;通过实战案例揭示漏洞成…

作者头像 李华