news 2026/6/25 21:00:50

数组(三)

作者头像

张小明

前端开发工程师

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/6/21 10:58:40

快过年了 , 我就简简单单写一个总结吧 ! | 马年快乐 !

1. 项目正式上线了 书接上回 , 经过一个月的不懈努力 , 我和另一个哥们终于把这个项目 (帮学校做校园宿舍报修系统小程序) 拿下了. 但是这边宿管长这边又出了点状况: 因为这个项目是为学校做公益,没有问宿管长要一分钱. 但是服务器的钱肯定是要宿管长联系学校那边给报销一下…

作者头像 李华
网站建设 2026/6/13 17:39:57

生命的二元张力:弗洛伊德生的本能与死的本能理论解析

生命的二元张力&#xff1a;弗洛伊德生的本能与死的本能理论解析 在经典精神分析理论体系中&#xff0c;西格蒙德弗洛伊德&#xff08;Sigmund Freud&#xff09;晚年提出的“生的本能”&#xff08;Eros&#xff09;与“死的本能”&#xff08;Thanatos&#xff09;二元理论&…

作者头像 李华
网站建设 2026/6/19 12:10:21

tauri2应用添加系统托盘Tray

官网文档&#xff1a;https://v2.tauri.app/learn/system-tray/ 有两种方式可以添加系统托盘&#xff0c;一种是在js中&#xff0c;一种是在rust中&#xff0c;官方都有使用案例&#xff0c;其中要注意&#xff1a; 要记得在配置文件中添加这个特性。 这里我记录一下在js中添…

作者头像 李华
网站建设 2026/6/19 16:58:45

大模型的数学工厂:揭秘GPU与TPU如何重塑AI计算架构

文章探讨了为什么大语言模型需要专门的硬件而非传统CPU。LLM本质上是数学工厂&#xff0c;执行大规模并行矩阵乘法运算。CPU因设计用于逻辑运算和分支决策而不适合处理这种计算密集型任务。GPU通过大规模并行核心和Tensor Core优化矩阵运算&#xff0c;而Google的TPU采用脉动阵…

作者头像 李华
网站建设 2026/6/25 6:32:38

智能环境测试仪设计

目录智能环境测试仪的设计要点关键技术实现应用场景示例源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;智能环境测试仪的设计要点 硬件设计 采用高精度传感器模块&#xff08;如温湿度传感器、PM2.5传感器、CO₂传感器等&#xff09;&…

作者头像 李华
网站建设 2026/6/20 4:34:18

智能货车集装箱系统

目录智能货车集装箱系统的核心功能系统的主要技术组成数据分析与优化应用安全监控与风险预警行业应用价值体现源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;智能货车集装箱系统的核心功能 智能货车集装箱系统通过物联网、大数据和人工…

作者头像 李华