当前位置: 首页 > article >正文

C语言一维数组

学习任何数据结构,都可以分为三个主要步骤:
了解基本概念:首先,我们需要理解数据结构的基本概念。以数组为例,首先要知道什么是数组,数组的定义是什么。数组是一种存储固定大小的元素集合的数据结构,它的元素类型是统一的,且通过索引访问。
了解数组的构造和内存分布:接下来,我们要深入了解数组是如何构造的,包括数组的内存分配方式。在内存中,数组通常是连续存储的,每个元素占据相同的空间,能够通过索引直接访问。了解内存的分布有助于理解数组的操作效率,例如随机访问、插入、删除等操作的时间复杂度。
搞清楚特征与应用场景:最后,我们需要清楚数组的特征,什么时候适合使用数组。数组有很多优点,比如支持高效的随机访问,但它的大小是固定的,不支持动态扩展,也不适合频繁的插入和删除操作。因此,在选择数据结构时,我们需要根据具体的应用场景来决定是否使用数组,或者选择其他数据结构。

今天也是基于c语言,分这三步彻底讲明白最简单的数据结构—一维数组。

1、基本概念

1.1、什么是一维数组

一维度数组是数据结构中的一种,它是由相同类型的元素组成的线性集合,可以通过一个索引来访问每个元素。可以理解为一个单一的线性列表。与数学中的向量或列表相似,一维度数组表示的是一个具有固定长度的顺序集合。

1.2 一维度数组的基本概念

一维度数组是数据结构中的一种,它是由相同类型的元素组成的线性集合,可以通过一个索引来访问每个元素。可以理解为一个单一的线性列表。与数学中的向量或列表相似,一维度数组表示的是一个具有固定长度的顺序集合。

1.2.1 一维度数组的基本概念

1.2.1.1 元素类型

一维数组中的所有元素都是相同类型的,通常是基础数据类型(如整数、浮点数、字符等)或对象(如类实例)。每个元素通过一个索引(下标)来访问。

1.2.1.2 索引(下标):

索引是用于标识数组中元素位置的数字,通常从 0 开始,即第一个元素的索引是 0,第二个元素的索引是 1,以此类推。在大多数编程语言中,数组的索引是零基的(即从 0 开始)。

1.2.1.3 数组的大小

一维数组的大小是固定的,即在创建数组时需要指定它的长度。长度决定了数组能够容纳的元素个数。一旦数组的大小确定,就不能更改(某些语言允许动态大小的数组,但一般依赖于某些内存分配机制)。

1.2.1.4 内存布局

数组的内容在内存中是怎么分布的,就叫做内存布局

2、构造和内存分布

2.1 构造

一维数组是由一组相同类型的数据元素按顺序排列组成的集合。在许多编程语言中,下面就是例子

int arr[5];  // 定义一个大小为5的整型数组
arr[0] = 1;  // 给数组元素赋值
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;

2.2 内存分布

一维数组的内存分布是线性的,即所有数组元素在内存中是连续存储的,这意味着每个元素的位置是通过一个常量的偏移量来确定的。

C语言中的内存分布:C语言中数组的内存分布是连续的。比如,数组 int arr[5] 存储在内存中的方式如下:

| arr[0] | arr[1] | arr[2] | arr[3] | arr[4] |

每个元素在内存中占据相同的大小(在这里是int类型,每个int通常占用4字节,具体取决于系统)。数组的起始地址是arr的地址,后续元素的地址是通过数组元素大小的偏移量来确定的。
例如,假设 arr 的起始地址为 0x1000,那么:
arr[0] 的地址是 0x1000
arr[1] 的地址是 0x1000 + 4 (假设每个int占4字节)
arr[2] 的地址是 0x1000 + 8
以此类推…

2.3、数组内存管理

**静态数组:**静态数组(如在C语言中通过int arr[5]定义的数组)在栈上分配内存。当数组的大小和元素类型已知时,编译器会在栈上分配一个固定大小的内存区域。

**动态数组:**动态数组(如C语言中的malloc分配的数组,或Java中的new关键字创建的数组)在堆内存中分配内存。动态数组的大小可以在运行时进行调整,内存的分配和释放由程序员或语言的垃圾回收机制负责。

3、数组的操作

包括如何声明、初始化、赋值、访问以及一些常见的操作。

3.1 声明和初始化一维数组

3.1.1 声明一维数组

在C语言中,声明一维数组的基本语法如下:

type array_name[size];

type 是数组元素的数据类型(如 int、char 等)。
array_name 是数组的名字。
size 是数组的大小,表示可以存储多少个元素。

例如,声明一个可以存储5个整数的数组:

int arr[5];

3.1.2 初始化一维数组

可以在声明数组时进行初始化。初始化的方法有几种:

3.1.2.1 按元素赋值
int arr[5] = {
   1, 2, 3, 4, 5};
3.1.2.2 部分初始化

如果数组的元素数目比提供的初始值多,剩余的元素会自动被赋值为0。例如:

int arr[5] = {
   1, 2};  // arr = {1, 2, 0, 0, 0}
3.1.2.3 不指定数组大小

如果初始化时已提供了所有元素的值,可以省略大小,由编译器自动推断:

int arr[] = {
   1, 2, 3, 4, 5};  // 自动推断出大小为5**

3.2 访问一维数组元素

C语言中通过数组下标访问一维数组的元素。数组下标从0开始。例如,arr[0] 表示数组的第一个元素。

3.2.1 访问数组元素


http://www.kler.cn/a/584020.html

相关文章:

  • 使用 ESP32 和 Python 进行手势识别
  • 【redis】list类型:基本命令(下)
  • C++复试笔记(三)
  • uniapp 实现的步进指示器组件
  • C++设计模式-原型模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
  • OpenHarmony 编译运行qemu模拟设备
  • MyBatis 中SQL 映射文件是如何与 Mapper 接口关联起来的? MyBatis 如何知道应该调用哪个 SQL 语句?
  • Tomcat新手入门指南:从零开始搭建Web服务器
  • SSR 框架是什么?
  • 使用 OpenAI 的 Node.js 通过 Ollama 在本地运行 DeepSeek R1
  • 工厂变电所运维云平台解决方案-直击运维痛点,重塑高效安全运维典范
  • 框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
  • 过滤器(Filter)与拦截器(Interceptor)
  • 【Git】所有文章传送门(持续更新...)
  • eNSP中路由器的CON/AUX接口、GE Combo接口、Mini USB接口、USB接口、WAN侧uplink接口、FE接口、GE接口介绍
  • C++程序员职业规划
  • IP层之分片包的整合处理---BUG修复
  • celery入门
  • 大模型架构记录5-向量数据库
  • AutoSar架构-----XCP模块与协议介绍