8级-数组

news2025/5/24 22:15:37

前情回顾:在7级的时候,我们学习了如何定义、使用函数


目录

概念

什么是数组?

一维数组

声明

初始化

访问元素

 计算数组长度

二维数组

 声明

 初始化

访问元素

思考

一维数组在内存中如何存储?

二维数组在内存中如何存储?


概念

什么是数组?

答:数组是一种线性数据结构,它用于存储一组相同类型的数据元素。它将多个具有相同数据类型的数据元素存储在一个连续的内存空间中。这些数据元素可以通过一个统一的名字(数组名)和索引来访问,即连续存储方式。数组的分配方式有:静态分配和动态分配。本章都是静态分配。


一维数组

声明

数据类型 数组名[数组大小];

 例如:

int arr[5]; // 声明一个包含5个整型元素的数组
float prices[10]; // 声明一个包含10个浮点型元素的数组
char name[20]; // 声明一个包含20个字符的数组

初始化

数组可以在声明时初始化,也可以部分初始化,然后在后续的代码中逐个赋值。

int arr[5] = {1, 2, 3, 4, 5}; // 初始化一个包含5个整数的数组
char str[10] ="HelloWorld"; // 初始化一个字符串

除了指定数组长度外,还有一种方式:数组长度根据初始化元素个数来决定,如下:

int arr[] = {1, 2, 3, 4, 5}; // 初始化一个整数数组,数组长度5个
char str[] ="HelloWorld"; // 初始化一个字符串,数组长度即是字符串长度

当数组元素为同一个数组时,可以采用统一初始化的方式,如下:

int arr[5] = {0};

访问元素

        数组元素可以采用下标访问。数组的元素在内存中是连续存放的,并且随着数组下标的增长,地址也是由低到高增长的。格式:数组名[下标]

接下来,使用for循环语句对数组进行遍历访问,如下:

#include <stdio.h>

int main() {
	int arr[5] = {1, 2, 3, 4, 5}; //数组的初始化 
	
	//数组的遍历 
	for(int i=0;i<5;i++)
		printf("%d\n",arr[i]);
		
	return 0;
}

结果:

遍历访问数组元素,也可以实现逐个初始化。如下:

#include <stdio.h>

int main() {
	int arr[5]; //数组的定义 
	
	//数组的遍历 
	for(int i=0;i<5;i++)
		arr[i] = i;    //元素赋值
		
	return 0;
}

 计算数组长度

当拿到某个数组时,不清楚其长度,可以用sizeof()函数来计算该数组的长度。

数组长度==数组总大小/数组元素大小

例程:

#include <stdio.h>

int main() {
	int arr[] = {1, 2, 3, 4, 5}; //数组的初始化 
	
	int len = sizeof(arr) / sizeof(arr[0]); //数组长度=数组总大小/数组元素大小 
		
	printf("arr数组长度:%d",len);
	
	return 0;
}

结果:


二维数组

 声明

 二维数组可以看作是一个矩阵,其中的每个元素可以通过两个索引(行索引和列索引)来访问。

数据类型 数组名[行数][列数];

例如:

int arr[3][4];//创建一个3行4列的整形二维数组
char arr[3][5];//创建一个3行5列的整形二维数组
double arr[2][4];//创建一个2行4列的浮点型形二维数组

 初始化

 二维数组同一维数组类似,初始化同样可以全部初始化、部分初始化和统一初始化。

二维数组全部元素初始化,如下:

int arr[3][2] = {{1,2},{4,5},{6,7}};

二维数组部分元素初始化,如下:

int arr[3][2] = {{1,2},{4,5}};

统一初始化二维数组中的所有元素,如下:

int arr[3][2] = {0};

二维数组定义时可以省略行长度,但不能省略列长度!如下:

int arr[][2] = {{2,3},{4,5}};

访问元素

 格式:数组名[行号][列号]

接下来使用for嵌套循环来实现二维数组的遍历,如下:

#include <stdio.h>

int main() {
	int arr[3][2] = {{1,2},{3,4},{5,6}};	//二维数组的初始化 
	
	//二维数组遍历 
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<2;j++){
			printf("%d ",arr[i][j]);
		}
		printf("\n");
	} 
	return 0;
}

结果: 


思考

一维数组在内存中如何存储?

答:数组在内存中都是连续存储的,以下为例

int arr[10]={1,2,3,4,5,6,7,8,9,10};

 解析:数组名为arr,数组长度为10,数据类型为int类型,int类型占4B。

步骤:

(1)根据数组长度10,及int类型占4B(32bit),所以为该数组分配10×32=320bit的连续内存空间

(2)将初始值一一转成补码形式,逐个放入每个元素的内存空间中


二维数组在内存中如何存储?

虽然我们的二维数组逻辑上看成是3行4列,但这只是为了便于理解,它真正在内存中的存放还是连续的。

int arr[3][4];

解析: 二维数组数组名为arr,数据类型为int类型,int类型占4B。在其内存为存储为一维数组形式,arr转一维数组长度为3×4=12。如下图所示:

拓展: 由于二维数组在内存中是转一维数组形式存储的,所以对二维数组遍历时,采用按行遍历速度更快。


         在该系列中,文章的前部分采用简短的白话文讲解用法,而后部分采用更深入的角度讲解原理。思考是人类的结晶~如果你觉得有用,给我个点赞、收藏+关注哦~持续更新         

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

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

相关文章

大模型 Agent 就是文字艺术吗?

最近在技术圈里有一个很有趣的争论&#xff1a;大模型 Agent 是不是就是各种 Prompt 的堆叠&#xff1f;像 Manus 这样看起来很智能的 Agent&#xff0c;本质上是不是就是用巧妙的 Prompt 约束大模型生成更好的输出&#xff1f;换句话说&#xff0c;这是不是一门文字艺术&#…

YOLOv8检测头代码详解(示例展示数据变换过程)

本文旨在通过实例数据&#xff0c;详细解读YOLOv8检测头的网络结构及其代码实现。首先将从检测头的网络架构开始讲解&#xff0c;涵盖代码与网络结构图的对比分析。关键在于深入探讨检测头的输出结果&#xff0c;因为这些输出将直接用于损失函数的计算。由于在不同阶段&#xf…

JUC并发编程1

什么是juc 在java的java.util.concurrent包下的工具。 锁 传统的synchronize public class SealTicket {int total 50;public synchronized void seal() {if (total > 0) {System.out.println(Thread.currentThread().getName() "卖出第" (total--) "张…

STM32开发环境配置——VSCode+PlatformIO + CubeMX + FreeRTOS的集成环境配置

前言 为什么配置这样的一个环境呢&#xff1f;鄙人受够了Keil5那个简陋的工作环境了&#xff0c;实在是用不下去&#xff0c;调试上很容易跟CubeMX的代码产生不协调导致调试——发布代码不一致造成的一系列问题。CubeIDE虽说不错&#xff0c;但是它的代码辅助功能和构建系统实在…

Profibus转Profinet网关赋能鼓式硫化机:智能化生产升级的关键突破

在现代工业自动化领域&#xff0c;通讯协议转换器发挥着至关重要的角色。它们能够实现不同网络间的无缝对接和数据传输&#xff0c;确保了生产线上的设备可以顺畅地交流信息。今天&#xff0c;我们就来深入讨论开疆智能profibus转profinet网关KJ-PBM-PN以及其在鼓式硫化机中的应…

MongoDB 用户与权限管理完全指南

在当今数据驱动的时代&#xff0c;数据库安全已成为企业IT架构中最关键的环节之一。作为最受欢迎的NoSQL数据库之一&#xff0c;MongoDB提供了完善的用户认证和权限管理机制&#xff0c;但许多开发者和数据库管理员对这些功能的理解和应用仍停留在表面层次。本文将全面剖析Mong…

基于ITcpServer/IHttpServer框架的HTTP服务器

https://www.cnblogs.com/MuZhangyong/p/16839231.html 在基于ITcpServer/IHttpServer框架的HTTP服务器实现中,OnBody方法主要用于接收HTTP请求体数据,而触发HTTP响应通常是在OnMessageComplete方法中完成。以下是完整的响应触发机制说明: sequenceDiagramClient->>…

FPGA高效验证工具Solidify 8.0:全面重构图形用户界面

近日&#xff0c;FPGA高效验证工具Solidify发布了8.0版本。该版本对图形用户界面&#xff08;GUI&#xff09;进行了全面重构&#xff0c;历时两年&#xff0c;经过了大幅的架构改进&#xff0c;旨在为用户提供更安全、更稳定的使用环境。 Solidify的用户对隐私有严格要求&…

SIL2/PLd 认证 Inxpect毫米波安全雷达:3D 扫描 + 微小运动检测守护工业安全

Inxpect 成立于意大利&#xff0c;专注工业安全技术。自成立起&#xff0c;便致力于借助先进雷达技术提升工业自动化安全标准&#xff0c;解决传统安全设备在复杂环境中的局限&#xff0c;推出获 SIL2/PLd 和 UL 认证的安全雷达产品。 Inxpect 的雷达传感器技术优势明显。相较于…

2025电工杯数学建模A题思路数模AI提示词工程

我发布的智能体链接&#xff1a;数模AI扣子是新一代 AI 大模型智能体开发平台。整合了插件、长短期记忆、工作流、卡片等丰富能力&#xff0c;扣子能帮你低门槛、快速搭建个性化或具备商业价值的智能体&#xff0c;并发布到豆包、飞书等各个平台。https://www.coze.cn/search/n…

LLM | 论文精读 | NAACL 2025 | Clarify When Necessary:教语言模型何时该“问一句”再答!

&#x1f50d; 解读 NAACL 2025 重磅论文《Clarify When Necessary》&#xff1a;教语言模型何时该“问一句”再答&#xff01; &#x1f9e9; 一、现实问题&#xff1a;大模型“看不懂装懂”有多危险&#xff1f; 我们每天用的 ChatGPT、Claude 等大型语言模型&#xff08;LL…

嵌入式鸿蒙openharmony应用开发环境搭建与工程创建实现

各位小伙伴大家好,本周开始分享鸿蒙开发相关的内容,从基础的配置方法到各种功能的实现,探索国产操作系统的奥秘。 第一:观察结果 第二:开源语言 ArkTS是鸿蒙应用开发中使用的TypeScript超集,提供了一套丰富的API来构建应用界面和逻辑。 第三:环境搭建 步骤 1 通过如…

MDK的编译过程及文件类型全解

本章参考资料&#xff1a;MDK的帮助手册《ARM Development Tools》&#xff0c;点击MDK界面的“help->uVision Help”菜单可打开该文件。 关于ELF文件格式&#xff0c;参考配套资料里的《ELF文件格式》文件。 在本章中讲解了非常多的文件类型&#xff0c;学习时请跟着教程的…

Linux Shell编程(八)

目录 Case语句 1--case格式 2--case使用案例&#xff1a;输入不容的数字&#xff0c;给出不同的结果 跳出循环 1--break 案例&#xff1a;执行十次时&#xff0c;跳出当前循环 完整流程 2--continue 案例&#xff1a;跳过2&#xff0c;4 输出 完整流程 Case语句 1--case格式 c…

AI筑基,新质跃升|英码科技亮相华为广东新质生产力创新峰会,发布大模型一体机新品,助力产业智能化转型

5月15日&#xff0c;以“AI筑基&#xff0c;新质跃升”为主题的华为中国行2025广东新质生产力创新峰会在惠州圆满召开。本次峰会聚焦人工智能、算力基础设施等新ICT技术如何驱动“新质生产力”&#xff0c;共探广东高质量发展新路径。英码科技受邀出席本次峰会&#xff0c;并携…

手机打电话时由对方DTMF响应切换多级IVR语音菜单(话术脚本与实战)

手机打电话时由对方DTMF响应切换多级IVR语音菜单 &#xff08;话术脚本与实战&#xff09; --本地AI电话机器人 上一篇&#xff1a;手机打电话时由对方DTMF响应切换多级IVR语音应答&#xff08;二&#xff09; 下一篇&#xff1a;手机打电话时由对方DTMF响应切换多级IVR语音…

面试题——JDBC|Maven|Spring的IOC思想|DI思想|SpringMVC

目录 一、JDBC 1、jdbc连接数据库的基本步骤&#xff08;掌握**&#xff09; 2、Statement和PreparedStatement的区别 &#xff08;掌握***&#xff09; 二、Maven 1、maven的作用 2、maven 如何排除依赖 3、maven scope作用域有哪些&#xff1f; 三、Spring的IOC思想 …

DETR3D- 3D Object Detection from Multi-view Images via 3D-to-2D Queries

MIT CORL 2021 纯视觉BEV方案transformer网络3D检测 paper&#xff1a;[2110.06922] DETR3D: 3D Object Detection from Multi-view Images via 3D-to-2D Queries code&#xff1a;GitHub - WangYueFt/detr3d DNN提图像特征&#xff0c;FPN提多尺度特征 pts_bbox_head Detr3…

SpringBoot3整合WebSocket

一、WebSocket简介 WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信&#xff0c;允许服务器主动向客户端推送数据。 与传统的 HTTP 请求-响应模式不同&#xff0c;WebSocket 在建立连接后&#xff0c;允许服务器和客户端之间进行双向…

鸿蒙进阶——驱动框架UHDF 机制核心源码解读(一)

文章大纲 引言一、uhdf 概述二、uhdf 的核心参与角色1、drivers/hdf_core/adapter/uhdf2/manager/device_manager.c1.1、drivers/hdf_core/framework/core/manager/src/devmgr_service.c#DevmgrServiceGetInstance通过objectId获取IDevmgrService实例1.2、drivers/hdf_core/fra…