数组——初识数据结构

模拟量传输4-20ma电流 大家可能会非常熟悉RS232,RS485,CAN等工业上常用的总线,他们都是传输数字信号的方式。那么,我们用什么方式来传输模拟信号呢?工业上普遍需要测量各类非电物理量,例如温度、压力、速度、角度等,这些都需要转换成模拟量电信号才能传输到几百米外的控制室或显示设备上。工业上最广泛采用的是用4~20mA电流来传输模拟量。 采用电流信号的原因是不容易受干扰,因为工业现场的噪声电压的幅度可能达到数V,但是噪声的功率很弱,所以噪声电流通常小于nA级别,因此给4-20mA传输带来的误差非常小;电流源内阻趋于无穷. 阅读详情

一维数组

数组的创建

数组是一种相同类型元素的集合

数组的创建方式

C99 中引入了变长数组的概念,变长数组支持数组的大小使用变量来指定

明显这里的vs2019不支持变长数组

数组初始化和不完全初始化

第二个数组就是典型的不完全初始化,开辟了10个空间,只有第一个是1,剩下的就用0填充

这里的ch1和ch2看起来似乎一样,但ch1只有 a b c, 后面的0是编译器主动加上的;ch2是abc\0,\0的ASCII码值也是0,所以后面也是6个0,但ch2本身就自带了一个

这样的代码也是有问题的,这里只用了一个空字符串初始化,所以数组的长度是一个元素

一维数组的使用

一个数组初始化好后每个元素都有其下标,下标是从0开始的

一维数组在内存中的存储

这里我们打印一下数组的每个元素的地址看看,%p是打印地址

我们发现每个相邻的地址最后的数字就相差4,因为这是整形数组,而一个整型是4个字节

数组在内存重视连续存放的!

随着数组下标的增长,地址也是由低到高变化的

数组开辟的空间也不宜太大

数组中的数据放在栈区

0和\0

二维数组

二维数组的创建

初始化

第一个参数是行数,第二个是列数

这个数组是怎么存放的呢?

其实是1234先把第一行放满,5放在第二行,其余的位置都是0

还有另一种初始化方式

就是指定初始化位置

以及,对于二维数组,初始化时,可以省略行,不能省略列

二维数组的使用

我们尝试一下一列一列打印

二维数组在内存中的存储

试着打印一下地址看看

能发现他们似乎也是连续存放的

也能将它们理解为一个12元素的整型数组

数组越界

当我们访问的空间超过数组申请的空间时,就造成了越界访问

还有这样

可能有人比较疑惑,为啥5会打印两次呢?

第一次打印了5个,第二次还是从行的下标0位置处开始,5这个位置是数组第二行的第一个元素,所以还会被打印一次。

数组应用

冒泡排序

冒泡排序(Bubble Sort)是一种简单直观的排序算法

冒泡排序的核心思想是:

通过相邻元素两两比较,把较大的元素“冒泡”到序列的一端,像水中的气泡一样逐步上升。

具体过程如下:

  • 从头到尾依次比较相邻两个元素,如果前一个比后一个大,就交换它们;

  • 每完成一轮,最大的元素就被“冒泡”到了当前未排序部分的末尾;

  • 然后对剩下的部分重复这一过程,直到整个序列有序。

比如排序 [5, 2, 4, 3, 1],第一轮结束后变成 [2, 4, 3, 1, 5],最大值 5 被放到了最后。之后对 [2, 4, 3, 1] 再次进行“冒泡”,直到全部排好序。

设有一个长度为 n 的数组,共需进行最多 n-1 轮“冒泡”:

  • 第 1 轮:比较 n-1 次,把最大值移到末尾;

  • 第 2 轮:比较 n-2 次,把次大值移到倒数第二位;

  • …

  • 第 n-1 轮:只需比较 1 次。

基本理念就是数组中的元素两两相比较,随后判断是否交换位置,最终的目的是排成一个升序或降序数组

或者函数的形式

#include<stdio.h>
void bubble_sort(int arr[10])
{
	//求数组的元素个数
	int sz = sizeof(arr) / sizeof(arr[10]);
	//冒泡排序的趟数
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		//一趟冒泡排序
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}

int main()
{
	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);

	//0 1 2 3 4 5 6 7 8 9
	//要对数组升序排序
	//冒泡排序
	bubble_sort(arr);
	//打印
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

但结果好像不对诶~

原来上面数组名传参的时候传递的只是数组首元素的地址,形参就是指针变量来接收,并没有把整个数组传上去。(这叫做数组名的降级)

上面sz就是1了,所以数组才会没变化

这时我们只需要在main函数里先把sz计算好,然后传给排序函数就行

#include<stdio.h>
void bubble_sort(int arr[10],int sz)
{
	//冒泡排序的趟数
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		//一趟冒泡排序
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}

int main()
{
	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);

	//0 1 2 3 4 5 6 7 8 9
	//要对数组升序排序
	//冒泡排序
	bubble_sort(arr,sizeof(arr)/sizeof(arr[0]));
	//打印
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

看一下这段代码

运行结果是两边都相等!

这里刚好也得出了

当p指向数组的第一个元素时,p+i就指向数组第i个元素

p里存放着数组首元素的地址,所以p和arr可以相互替换,下面这些效果也相等

还有加法交换律能得出的结论

前面讲了数组名是数组首元素地址,但存在两个例外

sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小,单位是字节

&数组名,数组名表示整个数组,取出的是整个数组的地址

看看这个,前面两个+1后跳过了一个整型元素,地址都是+4,而第三个+1后跳过了整个数组,地址变化了40个字节

强化学习环境Gym库的介绍 Gym是一个用于进行强化学习实验的开源库,它提供了一个仿真环境,内置了多种仿真游戏,例如出租车游戏、悬崖游戏等,不同的游戏所用的网格、规则、奖励(reward)都不一样,适合为强化学习做测试。(1) 多种环境:Gym库内置了上百种实验环境,包括算法环境、简单文本环境、经典控制环境、Atari游戏环境、MuJoCo环境和机械控制环境等。(2) Gym提供多种环境供我们使用,这里以一个简单的CartPole-v0为例,首先导入gym库,然后创建一个CartPole-v0环境,通过调用gym.make方法实现。 阅读详情

相关推荐

固定资产报废的损失鉴定怎么做?

在社会生产的日常中,企业经常会遇到固定资产报废的损失鉴定,那么怎么去做鉴定?哪些情况下能申请固定资产报废损失鉴定呢? 今天,华碧鉴定就和大家说一说固定资产报废损失鉴定那些事儿。 符合下列条件之一的固定资产可申请报废: 1、使用年限过长,功能丧失,完全失去使用价值,或不能使用并无修复价值的; 2、产品技术落后,质量差,耗能高,效率低,已属淘汰且不适于继续使用,或技术指标已达不到使用要求的; 3、严重损坏,无法修复的或虽能修复,但累计修理费已接近或超过市场价值的; 4、主要附件损坏,无.

weixin_50362670的博客 2116

初识数据结构之数组

为什么很多编程语言中数组都从0开始编号? 提到数组,我想你肯定不陌生,甚至还会自信地说,它很简单啊。 是的,在每一种编程语言中,基本都会有数组这种数据类型。不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构。尽管数组看起来非常基础、简单,但是我估计很多人都并没有理解这个基础数据结构的精髓。 在大部分编程语言中,数组都是从 0 开始编号的,但你是否下意识地想过,为什么数组要从 0 开...

慕白博客 404

PLC编程入门基础知识

PLC即为可编程逻辑控制器,实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同。

SANRENYIXING的博客 2万+

数组与数据结构初识

数据结构数据结构主要是数据的一个存储和逻辑结构的体现。只要能存储结构的一个结构我们就称为数据结构。

m0_74186355的博客 201

MPU6050 vs BMX055 vs ICM20602:如何为你的项目选择最佳陀螺仪(附实测数据对比)

本文深度对比了MPU6050、BMX055和ICM20602三款主流六轴IMU传感器的核心性能。通过实测数据,分析了它们在精度、噪声、温漂、接口速度及资源占用上的差异,并提供了从项目需求出发的选型指南,帮助开发者根据预算、精度要求和处理器性能选择最合适的陀螺仪与加速度计组合。

h0i1j2k3l的博客 969

基于 openEuler 24.03 LTS 源码编译安装 Zabbix 7.4

Zabbix是一款开源的企业级分布式监控系统,支持网络、服务器、应用等多种IT资源的监控。核心功能包括数据采集、告警通知、可视化展示等,采用Server/Agent架构,支持多种操作系统。本文详细介绍了在openEuler 24.03系统上部署Zabbix 7.4.2的完整流程,包括环境准备、MySQL配置、PHP/Apache安装、Zabbix编译安装等步骤,为构建企业级监控系统提供了实践指导。

广然笔记 1191

数据结构和算法初识 + 数组

目录数据结构和算法的关系线性结构和非线性结构稀疏sparsearray数组二维数组和稀疏数组的转换 数据结构和算法的关系 数据结构是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮,更加有效率的代码。 要学习好数据结构就要多多考虑如何将生活中遇到的问题,用程序去实现解决. 程序 = 数据结构 + 算法 数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。 线性结构和非线性结构 数据结构包括:线性结构和非线性结构。 线性结构 线性结构作为最常用

m0_56600567的博客 147

AD5940阻抗测量开发板实战:从源码获取到工程调试全解析

本文详细解析了AD5940阻抗测量开发板的实战应用,从源码获取到工程调试的全过程。AD5940作为ADI公司的高精度阻抗测量前端芯片,适用于生物阻抗分析、电化学传感器等领域。文章提供了开发环境搭建、工程配置、常见问题排查及进阶调试技巧,帮助开发者快速掌握AD5940开发板的使用方法。

weixin_30919429的博客 212

数据结构与算法 — 初识数据结构与算法、数组的使用及操作

目录 一、什么是数据结构 二、什么是算法 三、数组 1.数组的基本使用 (1).创建和初始化数组 (2).数组长度和遍历数组 2.数组的常见操作 (1).添加元素 (2).删除元素 (3).任意位置 3.数组的其他操作 (1).常见方法 (2).数组合并 (3).迭代方法 (4).reduce方法 一、什么是数据结构 ...

m0_59897687的博客 324

SAP PP CSAP_MAT_BOM_MAINTAIN ECN 增加组件

SAP PP CSAP_MAT_BOM_MAINTAIN ECN 增加组件。

GAVIN 409

【动态导通电阻】GaN功率器件中动态导通电阻退化的机制、表征及建模方法

研究目的:鉴于动态RON退化对GaN功率器件性能的显著影响,本文旨在全面综述和讨论GaN功率器件中动态RON退化的机制、表征方法、建模技术以及解决方案,以期为GaN功率器件的设计、优化和应用提供理论指导和实践参考。内容概述:文章首先分析了缓冲层陷阱和栅极不稳定导致动态RON退化的物理机制,并通过物理基础的TCAD模拟与高压背栅测量结果进行对比,揭示缓冲层陷阱的充电/放电过程如何影响动态RON。接着,讨论了不同GaN器件技术中栅极不稳定引起的动态RON增加以及栅极过驱动的作用。

荷塘阅色 1166

Java面试八股文宝典:初识数据结构-数组

下一章我们将继续探讨其他与 HashMap 相关的关键数据结构,包括HashSet。这些数据结构在特定的应用场景中发挥了重要作用,它们具有不同的特性和性能特点,我将详细介绍它们的使用方法、优势以及适用的情况。如果您在这些内容中发现任何不准确或需要进一步说明的地方,欢迎提出,我将尽力提供准确和有用的信息。让我们共同学习,共同进步。

qq_34445142的博客 339

Unity 面试篇|(六)数据结构和算法篇 【全面总结 | 持续更新】

先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样遍历完后,堆中的10000个数就是所需的最大的10000个。桶排序是计数排序的升级版。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。这样处理就可以分别在每个文件的10^6个数据中找出最大的10000个数,合并到一起在再找出1000*10000中的最终的结果。

游戏开发小Y的博客 12万+

高级数据结构1—初识树状数组—快速求得前缀和和修改某一元素值

树状数组的原理与模板

CS_boy的博客 989

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python算法笔记(2)-初识数据结构-数组、链表、栈、队列、哈希表

Python算法笔记(2)-初识数据结构-数组、链表、栈、队列、哈希表

入佛门六根不净,入商场狼性不足 803

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java面试八股文宝典:初识数据结构-数组的应用扩展之HashMap

除了基本的数组,还有其他高级的数据结构,用于更复杂的数据存储和检索需求。其中,HashMap是 Java 集合框架中的一部分,用于存储键值对(key-value pairs)。HashMap允许我们通过键来快速查找和检索值,类似于字典或关联数组的概念。HashMap在实际编程中广泛应用于各种场景,包括缓存、数据库索引、数据存储等。HashMap本文已经提供了有关HashMap的深入信息,包括其底层代码和注意事项。下一章将继续探讨 HashTable,以便能够全面了解这两个重要的数据结构。

qq_34445142的博客 394

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

07-【数据结构与算法-Day 7】告别数组束缚,初识灵活的链表 (Linked List)

在前面的文章中,我们学习了数组,一种强大且应用广泛的数据结构。然而,数组天生的“体质”——连续的内存空间和固定的大小,也给它带来了难以逾越的障碍,尤其是在处理动态数据和频繁增删的场景中。本文将带您认识一位新的“朋友”——链表(Linked List)。它通过一种“穿针引线”的巧妙方式,完美规避了数组的硬伤,提供了极高的插入和删除效率。本文将作为链表系列的开篇,从最基础的概念入手,为您揭开链表的神秘面纱,深入理解其核心构成:节点(Node)与指针(Pointer),并带您直观地感受单向链表的结构之美。

吴师兄大模型的博客 1145

Java面试八股文宝典:初识数据结构-数组的应用扩展之HashTable

上一章我们了解HashMap后,让我们深入研究HashTable,这是另一个键值对存储的数据结构。Hash表是一个非常重要且广泛用于编程中的数据结构,了解其工作原理和用法对于编写高效的程序非常重要。HashTable是一个重要的哈希数据结构,用于存储键值对。它具有快速查找、线程安全、不允许 null 键和值等特性。了解其底层实现和用法对于编写高效且安全的程序至关重要。在使用HashTable时,请注意线程安全性和性能方面的考虑,并根据实际需求进行调整。下一章我们将继续探讨其他数据结构,包括HashSet。

qq_34445142的博客 399

Java面试八股文宝典:初识数据结构-数组的应用扩展之ConcurrentHashMap

好的,本期我们的数组数据类型的讲解就到此结束。下期,我们将继续深入探讨链表数据结构,它将带领我们进入更加复杂和灵活的数据结构世界。如果您在学习过程中有任何问题或疑问,都欢迎在评论中提出或者私信联系我。我将竭尽全力为您提供更全面和详细的讲解,以确保您的学习得以顺利进行。期待下期的精彩内容!

qq_34445142的博客 407

JavaScript回顾六:数组和对象

我们学习数组就得知道什么是数组。 一、数组初识/特点 .数组:一组数据的集合,数组的每一个数据叫做一个元素;Array[4]:数组和长度; 数组元素可以是任意类型,同一个数组中的不同元素可能是对象或数组; 每个数组都具有一个length属性,length属性就是数组元素的个数(数组的长度); 数组中每个元素在数组中有一个位置,以数字表示,称为索引(下标); 索引从0开始排列,[0]表示第一个数据,以此类推; 数组最大的索引,始终比数组长度小1; 数组的数据类型是一个对象,其实就是加了个数字索引和lengt

weixin_49521534的博客 328

【c语言 】数组入门

今天,我们就来一起探索C语言中的数组,从初识数组到数组的存储方式,再到数组的定义和元素的访问方式,逐步揭开数组的神秘面纱。

m0_74195174的博客 1357

数据结构和算法基础(一)[初识复杂度,对数器,二分法,位运算及简单应用:找到二进制最右面的1,找到数组中的唯一/唯二奇数次出现的数]

初识复杂度 对数器 二分法 位运算及简单应用: 找到二进制最右面的1 找到数组中的唯一/唯二奇数次出现的数

书院二层楼 1025

2019-01-15

放了寒假后,我开始自己学习C语言,一边看PP T,一边看从图书馆借的书。如果我们在这之前还学过Python,会绝得C语言虽然比较难,但是逻辑却很严谨,通过学习C语言,有利于我们提高自己的逻辑思维。 一个星期过去了,我对C语言有了大概的了解,但是对链表、数组、文件的操作和一些函数库还是很生疏。 在学习C语言的时候,我们要多练习,要多尝试,很多代码都是在不断出错,不断修正的过程中成功...

qq_46197017的博客 152

Typescript入门 (1)

Typescript入门(1)一.Typescript开发环境搭建二、静态类型基础静态类型对象静态类型三.函数参数注解四.数组类型注解五.元组的使用和类型约束六.初识interface七.再识interface 一.Typescript开发环境搭建 下载Node.js //node官网 https://nodejs.org/zh-cn/ 安装Node.js 使用npm全局安装typescript //1.进入命令行 //2.输入以下代码 npm install typescript -g 创建

蜡笔小星的博客 133

数据结构和算法初识

本文主要讲解了数据结构和算法的基本概念及其两者关系,同时讲解了栈、队列和优先队列三种数据结构的概念、特点及其代码实现封装和相关面试题

zhanghuaiwei 602

数据结构—笔记整理—初识数据结构

数据结构笔记及相关知识整理,冲冲冲!!!

好好读书 4万+
上一篇: 递归——最烧脑的一集
下一篇: 操作符与表达式
宴之敖者、
博客等级 码龄4年 131粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值