news 2026/10/13 0:01:33

数组(三)

作者头像

张小明

前端开发工程师

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/10/12 14:43:32

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

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

作者头像 李华
网站建设 2026/10/11 22:46:19

QwenTTS 预设音色

import torch import soundfile as sf from qwen_tts import Qwen3TTSModel import os# 1. 设置代理 (如果需要) os.environ[HTTP_PROXY] http://127.0.0.1:7890 os.environ[HTTPS_PROXY] http://127.0.0.1:7890# 2. 定义你要保存模型的【指定文件夹】路径 # 使用绝对路径…

作者头像 李华
网站建设 2026/10/10 11:29:05

RAG真正难点揭秘:不是检索,而是知识库管理!

文章通过物流系统比喻&#xff0c;指出RAG的真正难点不在检索端&#xff0c;而在于知识库管理。如同物流中心的核心在于仓库管理而非货物运输&#xff0c;RAG系统也依赖于完善的知识库管理体系来处理数据的新增、更新、分类等问题&#xff0c;特别是在大规模数据场景下&#xf…

作者头像 李华
网站建设 2026/10/10 11:29:11

智能环境监测系统设计

目录 智能环境监测系统概述核心组成部分关键技术应用场景示例代码示例&#xff08;数据上传&#xff09;扩展功能 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 智能环境监测系统概述 智能环境监测系统是一种基于物联网&#xff08;…

作者头像 李华
网站建设 2026/10/9 8:06:05

智能避障扫地机器人

目录 智能避障扫地机器人的工作原理主流避障技术分类典型产品性能参数选购注意事项维护保养要点 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 智能避障扫地机器人的工作原理 智能避障扫地机器人通过多传感器融合技术实现环境感知与…

作者头像 李华