8级-数组
前情回顾:在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。如下图所示:
拓展: 由于二维数组在内存中是转一维数组形式存储的,所以对二维数组遍历时,采用按行遍历速度更快。
在该系列中,文章的前部分采用简短的白话文讲解用法,而后部分采用更深入的角度讲解原理。思考是人类的结晶~如果你觉得有用,给我个点赞、收藏+关注哦~持续更新
相关文章:

8级-数组
前情回顾:在7级的时候,我们学习了如何定义、使用函数 目录 概念 什么是数组? 一维数组 声明 初始化 访问元素 计算数组长度 二维数组 声明 初始化 访问元素 思考 一维数组在内存中如何存储? 二维数组在内存中如何存储&…...

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

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

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--) "张…...
消息队列RabbitMQ与AMQP协议详解
消息队列RabbitMQ与AMQP协议详解 什么是RabbitMQ RabbitMQ是一个开源的消息队列中间件,基于AMQP(Advanced Message Queuing Protocol)协议实现。它作为一个消息代理(Message Broker),可以接收、存储和转发…...
Day 29 训练
Day 29 训练 Day 29:Python 类装饰器的奥秘与实践一、类装饰器:函数装饰器的升级版二、类装饰器 VS 函数装饰器:核心区别三、实战:为类添加日志功能四、类方法定义的两种风格1. 类内部定义方法(常规方式)2.…...

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

Profibus转Profinet网关赋能鼓式硫化机:智能化生产升级的关键突破
在现代工业自动化领域,通讯协议转换器发挥着至关重要的角色。它们能够实现不同网络间的无缝对接和数据传输,确保了生产线上的设备可以顺畅地交流信息。今天,我们就来深入讨论开疆智能profibus转profinet网关KJ-PBM-PN以及其在鼓式硫化机中的应…...
redis 缓存穿透,缓存雪崩,缓存击穿
之前也不知道是哪个老六总结出来得缓存穿透,缓存击穿 。 穿透,击穿 中文上容易搞混,所以贴出英文 缓存穿透: Cache Penetration “Penetration” 有穿透、渗透之意, eg: the penetration of hackers into the system (黑客对系统的侵入) 缓…...
JAVA8怎么使用9的List.of
在 Java 8 中,List.of 方法并不可用,因为这是从 Java 9 开始引入的用于创建不可变列表的便捷方法。要在 Java 8 中达到类似的效果,您需要使用其他方式来创建列表。常规的方法是先创建集合对象然后再添加元素 List<String> list new A…...
告别手动测试:AUTOSAR网络管理自动化测试实战
文章目录 一、自动化测试系统架构硬件组成软件架构 二、测试覆盖的关键场景状态机测试时间参数测试容错性测试 三、测试case举例四、小结 一、自动化测试系统架构 AUTOSAR网络管理自动化测试由硬件设备和软件工具共同完成。 硬件组成 程控电源(DUT供电࿰…...
BUCK电路利用状态空间平均法和开关周期平均法推导
以BUCK电路为例的两种方法推导 BUCK电路简介 BUCK电路是一种降压型DC-DC转换器,其拓扑结构如下: 输入电压 V in V_{\text{in}} Vin,输出电压 V out = D V in V_{\text{out}} = D V_{\text{in}} Vout=DVin(稳态时, D D D为占空比)。关键元件:开关管 S S S、续流…...

MongoDB 用户与权限管理完全指南
在当今数据驱动的时代,数据库安全已成为企业IT架构中最关键的环节之一。作为最受欢迎的NoSQL数据库之一,MongoDB提供了完善的用户认证和权限管理机制,但许多开发者和数据库管理员对这些功能的理解和应用仍停留在表面层次。本文将全面剖析Mong…...
C++滑动门问题(附两种方法)
题目如下: 滑动窗口 - 题目 - Liusers OJ ——引用自OJ网站 方法如下: 1.常规思想 #include<bits/stdc.h> using namespace std; int main() {int n,k;int a[110];cin>>n>>k;for(int i0;i<n;i){cin>>a[i];}for(int i0;i…...

基于ITcpServer/IHttpServer框架的HTTP服务器
https://www.cnblogs.com/MuZhangyong/p/16839231.html 在基于ITcpServer/IHttpServer框架的HTTP服务器实现中,OnBody方法主要用于接收HTTP请求体数据,而触发HTTP响应通常是在OnMessageComplete方法中完成。以下是完整的响应触发机制说明: sequenceDiagramClient->>…...
初识main函数
int main(int argc, char *argv[]) {int a 0;return a; }X64 MSVC编译器 Windows x64调用约定 { // 将第二个参数(rdx)保存到栈[rsp0x10]位置 0x7ff6e54c2ad0 mov qword ptr [rsp10h],rdx // 将第一个参数(ecx)保存到栈[rsp8]位置 0x7ff6e54c2ad5 …...

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

SIL2/PLd 认证 Inxpect毫米波安全雷达:3D 扫描 + 微小运动检测守护工业安全
Inxpect 成立于意大利,专注工业安全技术。自成立起,便致力于借助先进雷达技术提升工业自动化安全标准,解决传统安全设备在复杂环境中的局限,推出获 SIL2/PLd 和 UL 认证的安全雷达产品。 Inxpect 的雷达传感器技术优势明显。相较于…...
java中string类型的list集合放到redis的5种数据类型的那种比较合适呢,可以用StringRedisTemplate实现
在Java中,如何将一个String类型的List集合存储到Redis中,并且应该选择Redis的哪种数据类型。同时,用户还问到是否可以使用StringRedisTemplate来实现。 首先,我需要回忆一下Redis的5种主要数据类型:字符串(…...
PyQt学习系列09-应用程序打包与部署
PyQt学习系列笔记(Python Qt框架) 第九课:PyQt的应用程序打包与部署 课程目标 掌握使用 PyInstaller 将PyQt应用程序打包为独立可执行文件学习处理 资源文件(图标、样式表、图片)和 依赖项实现 跨平台部署࿰…...
实现图片自动压缩算法,canvas压缩图片方法
背景: 在使用某些支持webgl的图形库(eg:PIXI.js,fabric.js)场景中,如果加载的纹理超过webgl可处理的最大纹理限制,会导致渲染的纹理缺失,甚至无法显示。 方案 实现图片自动压缩算…...
《数据结构笔记三》:单链表(创建、插入、遍历、删除、释放内存等核心操作)
不带头节点的单链表:(不带表头) #include<stdio.h> #include<stdlib.h> #include<string.h> //定义一个链表节点结构体 typedef struct Node {/* data */int data; //表示节点数据域struct Node *next; //…...
光伏行业如何利用SD-WAN优化分布式网络:替代MPLS、VPN、4G/5G的网络架构升级与云安全方案全解析
光伏行业的网络通信挑战与SD-WAN技术方案对比分析 光伏行业的分布式网络架构、远程站点多、通信环境复杂,以及对实时数据传输的高要求,使得网络架构成为影响行业数字化转型的重要因素。近年来,SD-WAN(软件定义广域网)…...

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

LLM | 论文精读 | NAACL 2025 | Clarify When Necessary:教语言模型何时该“问一句”再答!
🔍 解读 NAACL 2025 重磅论文《Clarify When Necessary》:教语言模型何时该“问一句”再答! 🧩 一、现实问题:大模型“看不懂装懂”有多危险? 我们每天用的 ChatGPT、Claude 等大型语言模型(LL…...

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

MDK的编译过程及文件类型全解
本章参考资料:MDK的帮助手册《ARM Development Tools》,点击MDK界面的“help->uVision Help”菜单可打开该文件。 关于ELF文件格式,参考配套资料里的《ELF文件格式》文件。 在本章中讲解了非常多的文件类型,学习时请跟着教程的…...
socc 19 echash论文部分解读
前言:论文还是得吃透才行,不然很多细节有问题 q1 object和data chunck哪一个大 根据论文,一个 data chunk 通常比一个 object 大,因为它是由多个 object 组合而成的 。 论文中提到,cross-coding 会将多个 object 组合…...

Linux Shell编程(八)
目录 Case语句 1--case格式 2--case使用案例:输入不容的数字,给出不同的结果 跳出循环 1--break 案例:执行十次时,跳出当前循环 完整流程 2--continue 案例:跳过2,4 输出 完整流程 Case语句 1--case格式 c…...

AI筑基,新质跃升|英码科技亮相华为广东新质生产力创新峰会,发布大模型一体机新品,助力产业智能化转型
5月15日,以“AI筑基,新质跃升”为主题的华为中国行2025广东新质生产力创新峰会在惠州圆满召开。本次峰会聚焦人工智能、算力基础设施等新ICT技术如何驱动“新质生产力”,共探广东高质量发展新路径。英码科技受邀出席本次峰会,并携…...