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

数组(C语言)(详细过程!!!)

目录

数组的概念

一维数组  

sizeof计算数组元素个数 

二维数组

C99中的变⻓数组


数组的概念

数组是⼀组相同类型元素的集合。 数组分为⼀维数组和多维数组,多维数组⼀般比较多见的是二维数组。

从这个概念中我们就可以发现2个有价值的信息:(1)数组中存放的是1个或者多个数据,但是数组元素个数不能为0。  (2)数组中存放的多个数据,类型是相同的。 

一维数组

1. 在学习一维数组之前我们先了解它的语法结构:type  arr_name[常量值]存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。type 指定的是数组中存放数据的类型,可以是: char 、 short 、 int 、 float 等,也可以自定义的类型; ar r_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就行; [   ] 中的常量值是用来指定数组的大小的,这个数组的大小是根据实际的需求指定就行。

2. 一维数组的创建和初始化

创建:例如现在我们要计算20个人的数学成绩,int math[20],这个就可以表示20个人的数学成绩,类型是int整型,另外要跟大家说的是int [20]和int [5]的类型是不一样的,是因为元素的个数是不同的,大家要记住这一点。

初始化:数组的初始化分为两种,一种是完全初始化,一种是不完全初始化,下面这张图给大家解释:

我们要注意的是在给数组初始化的时候一般后面使用大括号{  }的,我们可以选择完全初始化和不完全初始化,这就要看我们如何使用数组,下面给大家讲解如何使用一维数组。

3. 一维数组的使用

(1)第一我们要认识数组下标,C语言规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1,下 标就相当于数组元素的编号,如下:在C语言中数组的访问提供了⼀个操作符 [  ] ,这个操作符叫:下标引用操作符。 有了下标访问操作符,我们就可以轻松的访问到数组的元素了,比如我们访问下标为2的元素,我们就可以使arr[2] ,想要访问下标是3的元素,就可以使⽤ arr[3] ,如下代码:

int main()
{int a[6] = { 1,2,3,4,5,6 };printf("%d\n", a[2]);printf("%d\n", a[3]);return 0;
}

(2)第二就是如何打印数组的内容,只要我们产⽣数组所有元素的下标就可以了,那我们使用for循环产⽣0~9的下标,接下来使用下标访 问就行了。 如下代码:

 #include <stdio.h>int main(){int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int i = 0;for(i=0; i<10; i++){printf("%d ", arr[i]);}return 0;}

(3)第三就是对数组的输入,明白了数组的访问,当然我们也根据需求,自己给数组输⼊想要的数据,如下:

#include <stdio.h>
int main()
{int arr[10]={1,2,3,4,5,6,7,8,9,10};int i=0;for(i=0;i<10;i++){scanf("%d",&arr[i];}for(i=0;i<10;i++){printf("%d",arr[i]);}return 0;
}

那么这个代码就是我们可以自己输入数组的元素,然后再打印出来。

(4)第四是一维数组在内存中的储存,有了前⾯的知识,我们其实使用数组基本没有什么障碍了,如果我们要深入了解数组,我们最好能了 解⼀下数组在内存中的存储。 依次打印数组元素的地址,如下代码:

 #include <stdio.h>int main(){int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int i = 0;for(i=0; i<10; i++){printf("&arr[%d] = %p\n ", i, &arr[i]);}return 0;}

从输出的结果我们分析,数组随着下标的增⻓,地址是由⼩到⼤变化的,并且我们发现每两个相邻的 元素之间相差4(因为⼀个整型是4个字节)。所以我们得出结论:数组在内存中是连续存放的。这就 为后期我们使用指针访问数组奠定了基础。

sizeof计算数组元素个数 

在遍历数组的时候,我们经常想知道数组的元素个数,那C语言中有办法使用程序计算数组元素个数 吗? 答案是有的,可以使用sizeof。 sizeof 中C语⾔是⼀个关键字,是可以计算类型或者变量大小的,其实 sizeof也是可以计算数组的大小的。 如下代码:

 #include <stido.h>int main(){int arr[10] = {0};printf("%d\n", sizeof(arr));return 0;}

这里输出的结果是40,计算的是数组所占内存空间的总大小,单位是字节。 我们又知道数组中所有元素的类型都是相同的,那只要计算出⼀个元素所占字节的个数,数组的元素 个数就能算出来。这里我们选择第⼀个元素算大小就可以 ,也就是用所有字节除上一个一个元素的字节就可以得到元素的个数。

 #include <stido.h>int main(){int arr[10] = {0};int sz = sizeof(arr)/sizeof(arr[0]);printf("%d\n", sz);return 0;}

  这里输出的10就是有多少个元素 ,也就是我们所要求的元素个数。

二维数组

学习了一维数组,下面给大家讲解二维数组,如果我们把⼀维数组做为数组的元 素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称 为多维数组。其实二维数组的用法与一维数组的用法也有很多相同之处,下面给大家一一讲解: 

1.二维数组的创建和初始化

(1) 语法:type arr_name[ 常量值 1][ 常量值 2] ;例如: int arr[3][5]; double data[2][8]; 3表示数组有3行,5表示每一行有5个元素,int表示数组的每个元素是整型类型, arr是数组名,可以根据自己的需要指定名字,data数组意思基本⼀致。

(2)初始化:二维数组的初始化也有完全初始化和不完全初始化,稍有不同的是怎么去初始化,下面给大家附上一张图一次性说清楚:

 2.二维数组的使用

(1)⼆维数组的下标 :当我们掌握了⼆维数组的创建和初始化,那我们怎么使⽤⼆维数组呢? 其实⼆维数组访问也是使⽤下标的形式的,二维数组是有行和列的,只要锁定了行和列就能唯⼀锁定 数组中的⼀个元素。 C语⾔规定,⼆维数组的行是从0开始的,列也是从0开始的,如下所示:

 #include <stdio.h>int main(){int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};printf("%d\n", arr[2][4]);return 0;}//根据上图也就知道输出的结果是7

(2)二维数组的输入和输出:访问⼆维数组的单个元素我们知道了,那如何访问整个⼆维数组呢? 其实我们只要能够按照⼀定的规律产⽣所有的⾏和列的数字就⾏;以上⼀段代码中的arr数组为例, 行的选择范围是0~2,列的取值范围是0~4,所以我们可以借助循环实现⽣成所有的下标。  

(3)二维数组在内存中的存储:像⼀维数组⼀样,我们如果想研究⼆维数组在内存中的存储⽅式,我们也是可以打印出数组所有元素 的地址的。代码如下: 

从输出的结果来看,每⼀⾏内部的每个元素都是相邻的,地址之间相差4个字节,跨⾏位置处的两个元 素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以⼆维数组中的每个元素都是连续存放的。

C99中的变长数组

在C99标准之前,C语⾔在创建数组的时候,数组大小的指定只能使⽤常量、常量表达式,或者如果我 们初始化数据的话,可以省略数组大小。 如:

这样的语法限制,让我们创建数组就不够灵活,有时候数组⼤了浪费空间,有时候数组⼜⼩了不够⽤ 的。 C99中给⼀个变长数组(variable-lengtharray,简称VLA)的新特性,允许我们可以使用变量指定数组大小。 请看下⾯的代码:  上⾯⽰例中,数组 arr 就是变长数组,因为它的长度取决于变量 n 的值,编译器没法事先确定,只 有运行时才能知道 n 是多少。 变⻓数组的根本特征,就是数组⻓度只有运⾏时才能确定,所以变⻓数组不能初始化。它的好处是程 序员不必在开发时,随意为数组指定⼀个估计的⻓度,程序可以在运⾏时为数组分配精确的⻓度。有 ⼀个⽐较迷惑的点,变⻓数组的意思是数组的大小是可以使用变量来指定的,在程序运⾏的时候,根 据变量的⼤⼩来指定数组的元素个数,而不是说数组的大小是可变的。数组的⼤⼩⼀旦确定就不能再 变化了。

相关文章:

数组(C语言)(详细过程!!!)

目录 数组的概念 一维数组 sizeof计算数组元素个数 二维数组 C99中的变⻓数组 数组的概念 数组是⼀组相同类型元素的集合。 数组分为⼀维数组和多维数组&#xff0c;多维数组⼀般比较多见的是二维数组。 从这个概念中我们就可以发现2个有价值的信息&#xff1a;(1)数…...

视频生成模型 Dream Machine 开放试用;微软将停止 Copilot GPTs丨 RTE 开发者日报 Vol.224

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…...

Vue30-自定义指令:对象式

一、需求&#xff1a;创建fbind指定 要用js代码实现自动获取焦点的功能&#xff01; 二、实现 2-1、步骤一&#xff1a;绑定元素 2-2、步骤二&#xff1a;input元素获取焦点 此时&#xff0c;页面初始化的时候&#xff0c;input元素并没有获取焦点&#xff0c;点击按钮&…...

2024/06/13--代码随想录算法(贪心)3/6|134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列

134.加油站 力扣链接 class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:curSum 0 # 当前累计的剩余油量totalSum 0 # 总剩余油量start 0 # 起始位置for i in range(len(gas)):curSum gas[i] - cost[i]totalSum gas[i] - co…...

机器学习的分类

机器学习分类 ​ 机器学习是人工智能的一个分支&#xff0c;它使计算机系统能够从数据中学习并做出决策或预测。机器学习&#xff08;Machine Learning&#xff09;是一种基于数据驱动的方法&#xff0c;旨在通过自动化的统计模型和算法从数据中学习和提取模式&#xff0c;以进…...

【Linux】进程控制3——进程程序替换

一&#xff0c;前言 创建子进程的目的之一就是为了代劳父进程执行父进程的部分代码&#xff0c;也就是说本质上来说父子进程都是执行的同一个代码段的数据&#xff0c;在子进程修改数据的时候进行写时拷贝修改数据段的部分数据。 但是还有一个目的——将子进程在运行时指向一个…...

PFC旁路二极管、继电器驱动电路以及PFC主功率

R001和R002以及R003三个电阻作用是限放X电容上的电 整流桥串联两个BJ1和BJ2 电容C3:给整流桥储能&#xff0c;给后续llc供电 PFC工作是正弦波上叠加高频电流 PFC功率部分 2个PFC电感&#xff08;选择两个磁芯骨架小&#xff0c;有利于散热&#xff09;、2个续流二极管&…...

CrossOver 2024软件下载-CrossOver 2024详细安装教程

Crossover软件是一款可以在Mac、Linux和Chromebook上运行Windows程序的软件。 它是一款商业软件&#xff0c;由CodeWeavers公司开发&#xff0c;Crossover不是一个虚拟机或模拟器&#xff0c;它使用Wine技术来将Windows程序直接转换成可以在其他操作系统上运行的程序&#xff0…...

Spark MLlib机器学习

前言 随着大数据时代的到来&#xff0c;数据处理和分析的需求急剧增加&#xff0c;传统的数据处理工具已经难以满足海量数据的分析需求。Apache Spark作为一种快速、通用的集群计算系统&#xff0c;迅速成为了大数据处理的首选工具。而在Spark中&#xff0c;MLlib&#xff08;…...

React Native将 ipad 端软件设置为横屏显示后关闭 Modal 弹窗报错

问题&#xff1a; 将 ipad 端软件设置为横屏显示后&#xff0c;关闭 Modal 弹窗报错。 Modal was presented with 0x2 orientations mask but the application only supports 0x18.Add more interface orientations to your apps Info.plist to fix this.NOTE: This will cras…...

JavaEE大作业之班级通讯录系统(前端HTML+后端JavaEE实现)PS:也可选网络留言板、图书借阅系统、寝室管理系统

背景&#xff1a; 题目要求&#xff1a; 题目一&#xff1a;班级通讯录【我们选这个】 实现一个B/S结构的电子通讯录&#xff0c;其中的每条记录至少包含学号、姓名、性别、班级、手机号、QQ号、微信号&#xff0c;需要实现如下功能&#xff1a; &#xff08;1&#xff09;…...

代码随想录算法训练营第37天|● 56.合并区间● 738.单调递增的数字

合并区间 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 按照左边界从小到大排序之后&#xff0c;如果 intervals[i][0] < intervals[i - 1][1] 即intervals[i]的左边界 < intervals[i - 1]的右边界&#xff0c;则一定有重叠。&#xff08;本题相邻区间也算重贴…...

SQL Server中的CTE和临时表优化

在SQL Server中&#xff0c;优化查询性能是数据库管理的核心任务之一。使用公用表表达式&#xff08;CTE&#xff09;和临时表是两种重要的技术手段。本文将深入探讨CTE如何简化代码&#xff0c;以及临时表如何优化查询性能。通过实例和详尽解释&#xff0c;我们将展示这两种技…...

CCRC信息安全服务资质认证是什么

什么是CCRC认证&#xff1f; CCRC 全称 China Cybersecurity Review Technology and Certification Center。CCRC认证是指中国网络安全审查技术与认证中心进行的信息安全服务资质认证。简称信息安全服务资质认证。 CCRC&#xff0c;即中国网络安全审查技术与认证中心&#xff0…...

第五十一天 | 1143.最长公共子序列

题目&#xff1a;1143.最长公共子序列718.最长重复子数组的区别是&#xff0c;子序列不要求连续&#xff0c;子数组要求连续。这一差异体现在dp数组含义和递推公式中&#xff0c;本题是子序列&#xff0c;那就要考虑上nums1[i - 1] ! nums2[j - 1]的情况。 本道题与 1.dp数组…...

未来的5-10年,哪些行业可能会被AI代替?

在未来的5-10年&#xff0c;多个行业可能会受到AI技术的影响&#xff0c;其中一些工作可能会被AI所代替。以下是对可能被AI替代的行业及工作的一些概述&#xff1a; 客户服务与代表&#xff1a;随着AI技术的发展&#xff0c;特别是自动话术对话和语音生成技术的进步&#xff0…...

据报道,FTC 和 DOJ 对微软、OpenAI 和 Nvidia 展开反垄断调查

据《纽约时报》报道&#xff0c;联邦贸易委员会 (FTC) 和司法部 (DOJ) 同意分担调查微软、OpenAI 和 Nvidia 潜在反垄断违规行为的职责。 美国司法部将牵头对英伟达进行调查&#xff0c;而联邦贸易委员会将调查 OpenAI 与其最大投资者微软之间的交易。 喜好儿网 今年 1 月&a…...

人工智能发展历程和工具搭建学习

目录 人工智能的三次浪潮 开发环境介绍 Anaconda Anaconda的下载和安装 下载说明 安装指导 模块介绍 使用Anaconda Navigator Home界面介绍 Environment界面介绍 使用Jupter Notebook 打开Jupter Notebook 配置默认目录 新建文件 两种输入模式 Conda 虚拟环境 添…...

Dijkstra算法的原理

Dijkstra算法的原理可以清晰地分为以下几个步骤和要点&#xff1a; 初始化&#xff1a; 引入一个辅助数组D&#xff0c;其中D[i]表示从起始点&#xff08;源点&#xff09;到顶点i的当前已知最短距离。如果起始点与顶点i之间没有直接连接&#xff0c;则D[i]被初始化为无穷大&a…...

maven引入依赖时莫名报错

一般跟依赖的版本无关&#xff0c;会报出 Cannot resolve xxx 的错误。 这种情况下去IDEA的setting中找maven的仓库位置 在仓库中顺着包路径下寻找&#xff0c;可能会找到.lastUpdated 的文件&#xff0c;这样的文件一般是下载失败了&#xff0c;而且在一段时间内不再下载&…...

graalvm编译springboot3 native应用

云原生时代容器先行&#xff0c;为了更好的拥抱云原生&#xff0c;spring boot3之后&#xff0c;推出了graalvm编译boot项目&#xff0c;利用jvm的AOT&#xff08; Ahead Of Time &#xff09;运行前编译技术&#xff0c;可以将javay源码直接构建成机器码二进制的文件&#xff…...

代码随想录Day58

392.判断子序列 题目&#xff1a;392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;定义重合数记录s与t的比对情况&#xff0c;挨个取出t的字符&#xff0c;与s的字符进行比较&#xff0c;如果相同&#xff0c;重合数就加1&#xff0c;跳到s的下一个字…...

Android Verified Boot (AVB) 与 dm-verity 之间的关系、相同点与差异点

标签: AVB; dm-verity ;Android Android Verified Boot (AVB) 与 dm-verity 之间的关系、相同点与差异点 概述 Android Verified Boot (AVB) 和 dm-verity 是 Android 操作系统中用于确保设备启动过程和运行时数据完整性的两个重要技术。尽管它们有着不同的实现和侧重点,…...

C++学习笔记“类和对象”:多态;

目录 4.7 多态 4.7.1 多态的基本概念 4.7.2 多态案例--计算器类 4.7.3 纯虚函数和抽象类 4.7.4 多态案例二 - 制作饮品 4.7.5 虚析构和纯虚析构 4.7.6 多态案例三-电脑组装 4.7 多态 4.7.1 多态的基本概念 多态是C面向对象三大特性之一 多态分为两类 静志多态: 函数…...

QT Udp广播实现设备发现

测试环境 本文选用pc1作为客户端&#xff0c;pc2&#xff0c;以及一台虚拟机作为服务端。 pc1,pc2(客户端&#xff09;: 虚拟机&#xff08;服务端)&#xff1a; 客户端 原理&#xff1a;客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网…...

PyTorch 统计属性-Tensor基本操作

最小 min, 最大 max, 均值 mean&#xff0c;累加 sum&#xff0c;累乘 prod … >>> a torch.arange(0,8).view(2,4).float() >>> a tensor([[0., 1., 2., 3.],[4., 5., 6., 7.]])>>> a.min() ## 最小值&#xff1a;tensor(0.) >>> a.ma…...

波拉西亚战记加速器 台服波拉西亚战记免费加速器

波拉西亚战记是一款新上线的MMORPG游戏&#xff0c;游戏内我们有多个角色职业可以选择&#xff0c;可以体验不同的战斗流派玩法&#xff0c;开放式的地图设计&#xff0c;玩家可以自由的进行探索冒险&#xff0c;寻找各种物资。各种随机事件可以触发&#xff0c;让玩家的冒险过…...

Mocha + Chai 测试环境配置,支持 ES6 语法

下面是一个完整的 Mocha Chai 测试环境配置&#xff0c;支持 ES6 语法。我们将使用 Babel 来转译 ES6 代码。 步骤一&#xff1a;初始化项目 首先&#xff0c;在项目目录中运行以下命令来初始化一个新的 Node.js 项目&#xff1a; npm init -y步骤二&#xff1a;安装必要的…...

华为网络设备攻击防范

畸形报文攻击防范 攻击行为 畸形报文攻击是通过向交换机发送有缺陷的IP报文&#xff0c;使得交换机在处理这样的IP包时会出现崩溃&#xff0c;给交换机带来损失。 畸形报文攻击主要有如下几种&#xff1a; 没有IP载荷的泛洪攻击 IGMP空报文攻击 LAND攻击 Smurf攻击 TCP标…...

RK3588开发笔记-100M网口自协商成1000M网口

目录 前言 一、问题描述 二、原理图连接 三、解决方法 总结 前言 在进行RK3588开发过程中,遇到一个令人困惑的问题:在使用RTL8211F-CG phy芯片出来的100M网口在自协商后连接速率变成了1000M。这篇博客将详细记录这个问题的产生、排查过程以及最终的解决方案,希望能对遇到…...

新能源电动汽车价格/济南seo外包公司

前言 入职第一天 — 无聊&#xff08;小抱怨&#xff09; 目前已经找到了不错的实习岗位&#xff0c;所以这几天&#xff0c;我想把自己的面试经验写一下 面试过程 如何找到岗位 1、去boss直聘之类的平台&#xff08;相对于智联我更喜欢boss&#xff0c;真的&#xff0c;不…...

wordpress 添加xml/淄博网站营销与推广

Origin软件这个安装记录&#xff0c;在这&#xff0c;以后可能会再用 资源下载 资源在网盘里&#xff0c;安装过程也在里面&#xff0c;解压按照里面的步骤操作 链接&#xff1a;https://pan.baidu.com/s/1BFnxgwDdK8JXKSnjXa3foQ 提取码&#xff1a;nemo 资料来源 B站的一…...

软件工程主修课程/网站为什么要做seo

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 作者简介 吕洋洋 某大型资管公司在职量化策略研究员&#xff0c;熟悉数据清洗工作&#xff0c;擅于运用宏观因子、行业因子等进行对期货品种价格影响建模与相关性分析&#xff0c;理解机器学习多元回归…...

网站建设文字教程视频/东莞做网站推广

换成自己的keystore以后打包失败&#xff0c;显示这样的错误&#xff1a;安装包制作开始cd 安装包制作目录[BASE] && antBuildfile: 安装包制作目录build.xmlCopy_Ressource:[echo] Copy app resource.[echo][echo] assets[echo]init:[echo] Init output directory....…...

建设网站的技术手段/哈尔滨网络推广优化

在子类继承父类中&#xff0c;一般有一行super的语句&#xff0c;需要记住三种使用方法&#xff1a; 1、super.变量/对象名&#xff1b; 使用这种方法可以直接访问父类中的变量或对象&#xff0c;进行修改赋值等操作 2、super.方法名()&#xff1b; 直接访问并调用父类中的…...

司法局网站建设/a5站长网

转自&#xff1a;http://blog.itpub.net/4227/viewspace-536379/ 在10g以前&#xff0c;Oracle的全局索引分区方法只有一种&#xff0c;即范围分区。 SQL> CREATE TABLE T_PART_INDEX (ID NUMBER, NAME VARCHAR2(30), CREATE_DATE DATE); 表已创建。 SQL> INSERT INTO…...