C语言基础(09)【数组的概念 与一维数组】
数组
数组的概念
什么是数组
数组是相同类型、有序数据的集合。
数组的特征
- 数组中的数据称之为数组的元素(数组中的每一个匿名变量空间,是同构的)
- 数组中的元素存放在内存空间建立。
衍生概念:下标(索引)
- 下标或者索引代表了数组中元素距离第一个元素的(首地址所在元素)偏移量。举例:第一个元素距离第一个元素的偏移量为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}};
相关文章:

C语言基础(09)【数组的概念 与一维数组】
数组 数组的概念 什么是数组 数组是相同类型、有序数据的集合。 数组的特征 数组中的数据称之为数组的元素(数组中的每一个匿名变量空间,是同构的)数组中的元素存放在内存空间建立。 衍生概念:下标(索引) 下标或者索引代表…...

【JavaScript】Ajax 侠客行:axios 轻功穿梭服务器间
一、AJAX 概念和 axios 使用讲解 什么是 AJAX ? 使用浏览器的 XMLHttpRequest 对象与服务器通信 浏览器网页中,使用 AJAX技术(XHR对象)发起获取省份列表数据的请求,服务器代码响应准备好的省份列表数据给前端,前端…...

Django数据库连接报错 django.db.utils.NotSupportedError: MySQL 8 or later is required
可尝试换django版本 pip install django3.2.13 另外mysql下载地址 https://dev.mysql.com/downloads/installer/ 安装可以参考: https://blog.csdn.net/HHHQHHHQ/article/details/148125549 重点:用户变量添加 C:\Program Files\MySQL\MySQL Server …...

2025年- H57-Lc165--994.腐烂的橘子(图论,广搜)--Java版
1.题目描述 2.思路 3.代码实现 import java.util.LinkedList; import java.util.Queue;public class H994 {public int orangesRotting(int[][] grid) {//1.获取行数int rowsgrid.length;int colsgrid[0].length;//2.创建队列用于bfsQueue<int[]> quenew LinkedList<…...
2024 CKA模拟系统制作 | Step-By-Step | 16、题目搭建-sidecar 代理容器日志
目录 免费获取题库配套 CKA_v1.31_模拟系统 一、题目 二、考点分析 1. Sidecar 容器模式 2. 共享卷配置 3. 日志流式处理 4. 容器规范修改 三、考点详细讲解 1. Sidecar 模式架构 2. 关键组件解析 3. 日志流式处理原理 四、实验环境搭建步骤 1.编辑11-factor-app…...

(9)-Fiddler抓包-Fiddler如何设置捕获Https会话
1.简介 由于近几年来各大网站越来越注重安全性都改成了https协议,不像前十几年前直接是http协议直接裸奔在互联网。接着讲解如何抓取https协议会话。 2.什么是HTTPS? HTTPS就是加过密的HTTP。使用HTTPS后,浏览器客户端和Web服务器传输的数…...

Vue-Router 基础使用
Vue Router 是 Vue 官方的客户端路由解决方案。 客户端路由的作用是在单页应用 SPA 中将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面时,URL 会随之更新,但页面不需要从服务器重新加载。 Vue Router 基于 Vue 的组件系统构建&a…...

【案例分享】蓝牙红外线影音遥控键盘:瑞昱RTL8752CJF
蓝牙红外线影音遥控键盘 Remotec的无线控制键盘采用瑞昱蓝牙RTL8752CJF解决方案,透过蓝牙5.0与手机配对后,连线至 Remotec 红外 code server 取得对应影音视觉设备的红外 code后,即可控制多达2个以上的影音视觉设备,像是智能电视…...
利用SQL批量修改Nacos配置
在Nacos的应用场景中,配置信息的管理至关重要。当需要对特定的配置进行批量修改时,SQL能成为我们强大的助力工具。本文将围绕如何使用SQL语句,依据特定条件修改Nacos的config_info表配置展开讲解。 一、操作前置准备 1. 数据备份 在对conf…...

网络协议的原理及应用层
网络协议 网络协议目的为了减少通信成本,所有的网络问题都是传输距离变长的问题。 协议的概念:用计算机语言来发出不同的信号,信号代表不同的含义,这就是通信双方的共识,便就是协议。 协议分层(语言层和…...

Express教程【003】:Express获取查询参数
文章目录 3、获取URL中携带的查询参数3.1 参数形式:查询字符串3.2 参数形式:动态参数3.3 参数形式:Json数据 3、获取URL中携带的查询参数 3.1 参数形式:查询字符串 1️⃣通过req.query对象,可以访问到客户端通过查询…...
Android开发常用Kotlin高级语法
一、扩展函数与扩展属性:为系统类 “量身定制” 工具方法 Kotlin 的扩展机制允许为现有类(包括 Java 类)添加新功能,无需继承或修改原类。这在 Android 开发中尤其适合封装高频重复操作(如 View 操作、上下文获取&…...

输入ifconfig,发现ens33不见了,无法连接至虚拟机
输入ifconfig,发现ens33不见了,无法连接至虚拟机 输入ifconfig,发现ens33不见了,无法连接至虚拟机 输入ifconfig,发现ens33不见了,无法连接至虚拟机 当输入ifconfig,发现少了ens33,无…...
Android Stdio 编译 文件生成,以及Gradle
一、生成调试版 APK(无需签名) 适用于测试阶段,可直接安装到模拟器或真机调试。 编译项目 确保项目无错误(菜单栏 → Build → Make Project 或按 Ctrl F9)。 生成 APK 点击菜单栏 Build → Generate App Bundles o…...
前端面试准备-4
1.React Router的history模式中,push和replace有什么区别 都是用于页面导航,但是他们对浏览器历史记录的处理不一样。 ①:push是在浏览历史栈里加入一条新的浏览历史,点击返回键会返回上一个页面 ②;replace是替换当前历史记录…...
AI赋能金融风控:基于机器学习的智能欺诈检测系统实战教程
引言 在数字化转型浪潮中,金融欺诈手段呈现智能化、隐蔽化趋势。传统规则引擎已难以应对复杂多变的欺诈模式,而机器学习技术通过自动学习数据特征,正在重塑金融风控体系。本文将基于Python生态,以信用卡欺诈检测为切入点…...

Java虚拟机内存区域划分
Java虚拟机内存区域划分 Java虚拟机(JVM)的内存区域划分主要分为五个部分: 程序计数器:程序计数寄存器,给CPU使用本地方法栈:为JVM使用到的Native方法服务方法区:存储的是编译后的.class文件堆…...
如何下载python的第三方类库
无论是在cmd中(使用python环境),还是在Anaconda Prompt中(使用虚拟环境),都可以通过pip命令进行下载python的第三方类库。 pip install packagename --default-timeout600 -i https://mirrors.tuna.tsingh…...
Redis击穿,穿透和雪崩详解以及解决方案
在 Java 开发中,Redis 作为常用的缓存中间件,可能会面临击穿、穿透、雪崩这三类经典问题。以下是对这三个问题的详细解析及对应的 Java 解决方案: 一、Redis 缓存击穿(Cache Breakdown) 问题描述 定义:大…...

网络渗透基础:信息收集
1.信息收集 whois xx.com 域名注册信息 注册人、电话、email Whois.chinaz.com kali自带whois工具 域名备案信息 Beian.miit.gov.cn Tianyancha.com Icp.chinaz.com 爱站 Sou.xiaolanben.com 2.子域名收集 收集方式 枚举:基于字典搜索引擎:googleh…...

[SAP] 如何查询当前屏幕的Tcode?
事务代码Tcode是SAP中到达特定屏幕的快捷路径 如何查询以下屏幕的事务码Tcode? 要浏览当前所使用的屏幕的事务码,可以选择System | Status 这里的事务代码是[VA22],它是Change Quotation的事务代码...

ZigBee 协议:开启物联网低功耗通信新时代
在物联网蓬勃发展的时代,无线通信技术犹如连接万物的桥梁,而 ZigBee 协议以其独特的优势,在众多通信协议中脱颖而出,成为构建低功耗、可靠物联网网络的关键技术之一。 一、ZigBee 协议的起源与发展 ZigBee 这个名字充满了自然的灵…...

JavaScript 模块系统:CJS/AMD/UMD/ESM
文章目录 前言一、CommonJS (CJS) - Node.js 的同步模块系统1.1 设计背景1.2 浏览器兼容性问题1.3 Webpack 如何转换 CJS1.4 适用场景 二、AMD (Asynchronous Module Definition) - 浏览器异步加载方案2.1 设计背景2.2 为什么现代浏览器不原生支持 AMD2.3 Webpack/Rollup 如何处…...

STM32F407寄存器操作(ADC非连续扫描模式)
1.前言 书接上回,在看手册的时候我突然发现手册上还描述了另一种ADC扫描模式,即非连续扫描模式,想着连续扫描模式都已经探索过了,那就顺手把非非连续模式研究一下吧。 2.理论 我们先看看手册,这里我就以规则通道举例…...
生产系统中TongWeb故障应急处理办法
本文档主要说明在上线正式运行的系统中,若TongWeb或部署在TongWeb上的应用出现问题时,现场维护人员或在现场的TongWeb支持人员应当采取的处理步骤。 工作基本原则: 任何操作必须经过项目相关负责人同意后进行,禁止在未允许的情况…...

PHP学习笔记(十一)
类常量 可以把在类中始终保持不变的值定义为常量,类常量的默认可见性是public。 接口中也可以定义常量。 可以用一个变量来动态调用类,但该变量的值不能为关键字 需要注意的是类常量只为每个类分配一次,而不是为每个类的实例分配。 特殊的…...
PyTorch中 torch.utils.data.DataLoader 的详细解析和读取点云数据示例
一、DataLoader 是什么? torch.utils.data.DataLoader 是 PyTorch 中用于加载数据的核心接口,它支持: 批量读取(batch)数据打乱(shuffle)多线程并行加载(num_workers)自…...

直线模组在手术机器人中有哪些技术挑战?
手术机器人在现代医疗领域发挥着越来越重要的作用,直线模组作为其关键部件,对手术机器人的性能有着至关重要的影响。然而,在手术机器人中使用直线模组面临着诸多技术挑战,具体如下: 1、高精度要求:手术…...

RK3568DAYU开发板-平台驱动开发--UART
1、程序介绍 本程序是基于OpenHarmony标准系统编写的平台驱动案例:UART 系统版本:openharmony5.0.0 开发板:dayu200 编译环境:ubuntu22 部署路径: //sample/06_platform_uart 2、基础知识 2.1、UART简介 UART指异步收发传输器(Univer…...
ubuntu 安装 Redis 5.0.8 的完整步骤
以下是根据前面的沟通记录整理的完整安装过程和依赖项,确保在 Ubuntu 22 上成功安装 Redis 5.0.8。 安装 Redis 5.0.8 的完整步骤 1. 安装依赖 在编译和运行 Redis 之前,需要安装一些必要的工具和库: sudo apt update sudo apt install bu…...