C语言基础(09)【数组的概念 与一维数组】

article/2025/8/13 19:14:41

数组

数组的概念

什么是数组

数组是相同类型、有序数据的集合。 在这里插入图片描述

数组的特征
  • 数组中的数据称之为数组的元素(数组中的每一个匿名变量空间,是同构的)
  • 数组中的元素存放在内存空间建立。
衍生概念:下标(索引)
  • 下标或者索引代表了数组中元素距离第一个元素的(首地址所在元素)偏移量。举例:第一个元素距离第一个元素的偏移量为0,所以数组的下标是从0,开始的
  • 数组中元素的地址值下标越大地址值越大。(每一块内存空间都有一个独有的内存地址,内存中每8个bit也就是1个字节编一个号,这个号就是我们所说的内存地址)数组的下标是从0开始的。
  • 数组中元素的地址值,下标越大,地址值越大。(每一块内存空间都有一个独有的内存地址, 内存中每8个bit也就是1个字节编一个号,这个号就是我们所说内存地址)

int a,b,c,d;====int a [4]

在这里插入图片描述
在这里插入图片描述

一维数组

数组的定义

语法:

类型说明符/数据类型 数组名 [数组的容量]

说明:

  • 数组的类型说明符由数组中的元素所决定的,类型说明符也就是数据类型,元素是什么类型,数组就是什么类型,数组就是什么类型。同一个数组中,数组中所有类型都是一致的。
  • 数组名也是标识符,我们所说的数组(名),大家可以理解为数据类型是数组的变量(名)。命名规则与变量名相同,遵循标识符的命名规则
  • 数组容量也可以叫做常量表达式或者元素个数,其值必须为整型,可以包含常量和符号常量, 但不能是变量。
int size = 10;
int arr[size];// 这里永远是10,因此此时数组的内存已将申请,此时数组的大小就是10,并不会因为后面对
size重新赋值而改变
size = 22;
printf("%d",size);// 22

举例:

#define SIZE 4;// 符号常量
写法1,符号常量:int arr[SIZE];
写法2,常量:int size = 4; int arr[size]; // 重新给size赋值,并不会影响到数组的大小
写法3,常量:int arr[4];  int lcd[800*480];

类型:

​ 代表了数组中元素的类型

容量:

​ 数组中能存储多个元素,数组容量可以是一个常量、常量表达式、还可以是符号常量,但必须是整型。

深入理解:

​ ①定义一个数组,相当于申请了一个可以容纳所指定元素数量的内存单元。所申请的内存单元是连续的。

​ ②定义一个数组,相当于定义了多个匿名的变量,这写变量可以通过数组名下标来访问

范例:

// 定义一个数组
int arr[10];// 此时只是在内存中申请了10个元素所对应的空间,此时里面的值是随机值,大概率是0
// 上面数组中,最小下标是0,最大下标是9
数组元素的访问

原则:数组中的元素不能一次性访问所有,只能一个一个的访问。

访问方式:

数组的初始化

定义数组时,用指定数据来给对应的元素赋值

简化数组定义后,需要对元素一一进行赋值

语法规则:

数组名[下标];

举例:

// 定义一个容纳10个元素的int数组
int arr[10];
// 给数组的第一个元素进行赋值(存数据)
arr[0] = 89;
// 访问数组中的第一个元素(取数据)
int a = arr[0];
int c = arr[9]; // 0
int b = arr[10];// error,报下标越界异常,所以使用数组的过程中,一定要进行下标越界校验,否则报错

在这里插入图片描述

注意:数组元素的访问一定不能越界

  • 数组部分可以初始化,也就是可以给数组前几个元素初始化,未被初始化的元素大概率是0;如果定义数组时未指定数据容量,则系统会根据初始化元素的个数来决定数组的容量。

  • 柔性数组:

    标准理解:柔性数组的概念:是在C99标准,针对结构体的最后一个成员可以指定大小的数组:(暂时了解)

    广义理解:数组

数组的经典应用:冒泡排序
向后冒泡
  • 一次只排好一个数,针对n个数,最差情况需要n-1次就可以排好
  • 每次排序将相邻数据两两比较,将较大或者较小的数据向后交换,等所有数据比较完成,较大或者较小的数就会出现在最后,这也就是该数应该有的位置。
向前冒泡
  • 元素数量-1=需要排的轮数

    • 比较次数:
      • 第一轮比4次()

选择排序、插入排序、快速排序、桶排序、堆排序、希尔排序、鸡尾酒排序、冒泡排序、二分查找、归并排序。

二维数组

定义

二维数组shian本质是一个行列式的组合,也就是说二维数组由行和列两部分组成,属于多维数组。

二维数组可以看作特殊的一维数组。相当于二维数组又是一个一维数组,只不过他的元素是一维数组()

语法:

数据类型 数组名 [行数][列数]//二维数组外层表示行数,内存表示列数

举例:

int arr[3][3] = {{11,22,33},{12,13,14},{23,24,25}};//等价于下面写法
int arr[][3]  = {{11,22,33},{12,13,14},{23,24,25}};int arr[3][3] = {{11,33},{12,14},{23,24,}};

注意:在C语言中,二维数组在计算机中的存储数据是按照行进行得到,即第一维的下标变化慢,即二维的下标变化快。

应用场合

主要运用于数据有行列要求的情况。比如说

特殊写法
  • 下标可以是整型表达式,如:a[2-1][2*2-1]
  • 下标可以是已经有值的变量或数组成元素,a[2*x-1][[3][1]]
  • 数组元素可以出现表达式中,如:b[1][2]=a[2][3]/2
  • 使用数组元素的下标应在已定义数组的范围内;应注意区别定义数字组的大小和引用元素的数组的区别
初始化
  • 分行给二维数组赋初值
int arr[3][4] = {{11,12,13,14},{21,22,23,24},{31,32,33,34}};
  • 可将所有数据写在一个花括号内,按照排列顺序对元素赋值
 int arr[3][4] = {11,12,13,14,21,22,23,24,31,32,33,34};
  • 可对部分元素赋初值,其余未赋值部分自动填充 整型默认值-0 | 字符型默认值-\0 | 浮点型默认 值-0.0…
int arr[3][4] = {{11},{21,22},{31}};
  • 若对全部元素赋初值,自定义数组时可以省略第1维数组的长度,第2维数组的长度必须指明。
int a[][4] = {11,12,13,14,21,22,23,24,31,32,33,34};
  • 在分行赋初值时,也可以省略第1维的长度。
int arr[][4] = {{11,12,13},{0},{0,10}};

http://www.hkcw.cn/article/LXempnajJo.shtml

相关文章

Spring MVC参数绑定终极手册:单多参/对象/集合/JSON/文件上传精讲

我们通过浏览器访问不同的路径,就是在发送不同的请求,在发送请求时,可能会带一些参数,本文将介绍了Spring MVC中处理不同请求参数的多种方式 一、传递单个参数 接收单个参数,在Spring MVC中直接用方法中的参数就可以&…

【Go-补充】Sync包

并发编程-Sync包 sync.WaitGroup 在代码中生硬的使用time.Sleep肯定是不合适的,Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法: 方法名功能(wg * WaitGroup) Add(delta int)计数器delta(wg *WaitGroup) Done()…

M-OFDM模糊函数原理及仿真

文章目录 前言一、M序列二、M-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、m-OFDM 模糊函数②、m-OFDM 距离分辨率③、m-OFDM 速度分辨率④、m-OFDM 等高线图 四、资源自取 前言 本文进行 M-OFDM 的原理讲解及仿真&#x…

《C++初阶之入门基础》【C++的前世今生】

【C的前世今生】目录 前言:---------------起源---------------一、历史背景二、横空出世---------------发展---------------三、标准立世C98:首个国际标准版本C03:小修订版本 四、现代进化C11:现代C的开端C14:对C11的…

长上下文推理新范式!QwenLong-L1如何通过强化学习突破大模型语境局限?

长上下文推理新范式!QwenLong-L1如何通过强化学习突破大模型语境局限? 在大模型推理能力不断精进的今天,长上下文处理仍是亟待突破的难题。本文介绍的QwenLong-L1框架,借助渐进式语境扩展与强化学习,成功让大模型在长…

git 学习

目录 关于git 版本管理概述 git的优点 一 下载,安装git 二 使用git 的处理流程 三 学习基本的git命令 1 git初始化 2 查看 状态 3 提交的缓存区 4回退到工作区 关于git 版本管理概述 码云:Gitee - 基于 Git 的代码托管和研发协作平台 git 是用…

中国风展示工作总结商务通用PPT模版

中国风展示工作总结商务通用PPT模版:中国风商务通用PPT 模版https://pan.quark.cn/s/42ad18c010d4

gitflow

gitflow 1. 各个分支介绍 master分支: 源代码 HEAD始终反映出生产就绪状态。仅包含 生产环境可发布的代码,每个提交对应一个正式版本(通过 git tag 打版本号)一般情况下,只允许合并(如从 release 或 hotfix 分支合并), 禁止直接提…

Python训练营---Day42

DAY 42 Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业:理解下今天的代码即可 1、回调函数 回调函数(Callback Function)是一种特殊的函数,它作为参数传递给另一个函数&#…

Git远程操作

目录 1. 理解分布式版本控制系统 2. 远程仓库 3. 新建远程仓库 4. 克隆远程仓库 4.1 使用HTTPS方式: 4.2 使用SSH方式: 5. 向远程仓库推送 总结: 问题: 6. 拉取远程仓库 7. 配置Git 7.1 忽略特殊文件 8. 给命令配置别…

SolidWorks软件的安装与卸载

文章目录 软件的下载途径软件的安装软件的卸载 简介:这篇文章介绍了SolidWorks软件的安装与卸载,步骤是比较繁琐的,但照着步骤一步一步的来15分钟就能安装成功。这里要特别的注意一点的是,文件的安装位置一定要集中(别…

Python 验证码识别(使用pytesseract库)

文章目录 摘要1、安装Tesseract-OCR2、在python中使用安装依赖 3、本地图片识别4、结合playwright动态识别网站验证码 摘要 python中使用pytesseract库进行ocr识别,需要安装Tesseract-OCR,通过指定pytesseract.tesseract_cmd路径,可以将esser…

日志与策略模式

什么是设计模式 IT行业这么火, 涌入的人很多. 俗话说林子大了啥鸟都有. 大佬和菜鸡们两极分化的越来越严重. 为了让菜鸡们不太拖大佬的后腿, 于是大佬们针对一些经典的常见的场景, 给定了一些对应的解决方案, 这个就是 设计模式 日志认识 计算机中的日志是记录系统和软件运行中…

ToolsSet之:XML工具

ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用,应用基本功能介绍可以查看以下文章: Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Text菜单下的XML Tool工具是一个Xml工…

2025年目前最新版本Android Studio自定义xml预览的屏幕分辨率

一、前言 在实际开发项目当中,我们的设备的分辨率可能会比较特殊,AS并没有自带这种屏幕分辨率的设备,但是我们又想一边编写XML界面,一边实时看到较为真实的预览效果,该怎么办呢?在早期的AS版本中&#xff…

sql知识梳理(超全,超详细,自用)

目录 通识 查询的基本语法 数据库(database)操作 表(table)的操作 表中列的操作 索引操作 表中行的操作 insert into语句 update语句 删除语句 select语句 表与表之间的关系 连接查询 子查询 视图 数据备份与还原 …

数据分析图表类型及其应用场景

说明:顶部HTML文件下载后可以直接查看,带有示图。 摘要 数据可视化作为现代数据分析的核心环节,旨在将复杂、抽象的数据转化为直观、易懂的图形形式。这种转化显著提升了业务决策能力,优化了销售与营销活动,开辟了新…

1、树莓派更换软件下载源

树莓派官方系统raspbian自带的是国外的软件源,在国内使用经常会遇到无法下载软件的问题。 以下是把raspbian系统(buster版本)的下载源改为阿里云软件源的方法。 1、修改sources.list文件 sudo nano /etc/apt/sources.list 将初始化中的代…

TDengine 集群容错与灾备

简介 为了防止数据丢失、误删操作,TDengine 提供全面的数据备份、恢复、容错、异地数据实时同步等功能,以保证数据存储的安全。本节简要说明 TDengine 中的容错与灾备。 容错 TDengine 支持 WAL 机制,实现数据的容错能力,保证数…

第十五章 访问控制

系列文章目录 第一章 总体概述 第二章 在实体机上安装ubuntu 第三章 Windows远程连接ubuntu 第四章 使用Docker安装和运行EMQX 第五章 Docker卸载EMQX 第六章 EMQX客户端MQTTX Desktop的安装与使用 第七章 EMQX客户端MQTTX CLI的安装与使用 第八章 Wireshark工具的安装与使用 …