【C语言】数组的声明和使用(一维数组、多维数组)

news2024/9/23 13:30:46

数组

    • 一、什么是数组?
    • 二、一维数组
      • (一)一维数组声明
      • (二)一维数组初始化
      • (三)一维数组的引用
    • 三、多维数组(以二维数组为例)
      • (一)二维数组声明
      • (二)二维数初始化
      • (三)二维数组的引用

一、什么是数组?

C语言支持数组数据结构,是用来存储固定大小的相同类型元素的顺序集合,往往被认为是一系列相同类型的变量。

特点:

  1. 有序数据的集合。
  2. 数组内所有元素类型相同。
  3. 所有的数组都是由连续的内存位置组成,最低的地址对应第一个元素,最高的地址对应最后一个元素。
  4. 数组中的特定元素可以通过索引访问,第一个索引值为 0。

在这里插入图片描述

二、一维数组

(一)一维数组声明

在 C 中要声明一个数组,需要指定元素的类型和元素的数量,一维数组定义:

类型说明符	数组名[常量表达式];

注意:

  1. 数组名必须是合法的标识符
  2. [ ]中的内容可以是常量和符号常量,不可以是变量

例如:

int a[10];

a为整型数组名,含有10个元素:a0, a1, a2 … a9 。
在这里插入图片描述

(二)一维数组初始化

在 C 语言中,可以逐个初始化数组,也可以使用一个初始化语句,对数组元素的初始化可以用以下方式实现:
(1)在定义数组时对数组元素赋初值。
例如:

int a[10]={0,1,2,3,4,5,6,7,8,9};

此实数组元素的值为:

a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9

注意:大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。

(2)只给一部分元素赋初值。
例如:

int a[10]={0,1,2,3};

数组a定义了10个元素,但是{}内只提供了4个初值,表示只给前4个元素赋值,后6个元素值为0。

(3)在对全部数组元素赋初值时,可以不指定数组长度,此时数组的长度就是初值的个数。
例如:

int a[]={0,1,2,3,4};

此时定义了数组长度为5的数组a,并全部元素赋初值。

(三)一维数组的引用

数组元素可以通过数组名称加索引进行访问,元素的索引是放在方括号内,跟在数组名称的后边。只能逐个引用数组元素,而不能一次引用整个数组,例如:

int b = a[index];

index为数组下标,可以是整型常量或者整型表达式,数组下标范围:0~(n-1),n为数组长度,使用数组时注意防止下标越界。

三、多维数组(以二维数组为例)

C 语言支持多维数组。多维数组声明的一般形式如下:

type arrayName[size1][size2]...[sizeN];

下面以二维数组为例进行介绍。

(一)二维数组声明

多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下:

type arrayName [x][y];

其中,type 可以是任意有效的 C 数据类型,arrayName 是一个有效的 C 标识符。一个二维数组可以被认为是一个带有 x 行和 y 列的表格。下面是一个二维数组,包含 3 行和 4 列:

int a[3][4];

在这里插入图片描述
因此,数组中的每个元素是使用形式为 a[ i , j ] 的元素名称来标识的,其中 a 是数组名称,i 和 j 是唯一标识 a 中每个元素的下标。

(二)二维数初始化

二维数组初始化可以使用如下方法:

(1)分行为二维数组赋初值。例如:

int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

(2)可以将所有的数组给到一个{ }内,按数组排列的顺序对各元素赋值。例如:

int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

(3)可以对部分元素赋初值。例如:

int a[3][4] = {{1},{5},{9}};

此时对二维数组各行的第一列元素赋初值,其余元素为0,赋值后的数组元素为:
1 0 0 0
5 0 0 0
9 0 0 0

也可以对各行的某一元素赋初值,例如:

int a[3][4] = {{1},{0,5},{9,0,2}};

赋值后的数组元素为:
1 0 0 0
0 5 0 0
9 0 2 0

(4)如果对全部元素赋初值,则定义数组时可以不指定第一维的长度,但是不能省略第二维的长度。例如:

int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

等价于:

int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

系统会根据数据的总数分配存储空间,一共12个数据,每行4列,可以确定3行。

(5)可以只对部分元素赋初值而省略第一维的长度,但是要分行赋初值。例如:

int a[][4] = {{1,0,2},{5,0,0},{}};

此时,数组元素为:
1 0 2 0
5 0 0 0
0 0 0 0

(三)二维数组的引用

二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的。例如:

int b = a[2][3];

(1)二维数组元素的表现形式为:数组名 [下标][下标]
(2)二维数组的元素可以出现在表达式中,也可以被赋值。
(3)使用二维数组元素时,注意下标值是否在定义的数组大小范围内,防止下标越界。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyQt5数据库开发1 4.3 QSqlTableModel 之 Qt项目的创建

目录 一、新建Qt项目 1. 编辑资源文件 2. 添加前缀 3. 新建放资源文件的目录 4. 添加图标文件 二、Action 1. 新建打开数据库Action 2. 添加其他Action 三、工具栏 1. 添加工具栏 2. 拖动actOpenDB到工具栏 3. 设置工具栏属性 4. 添加分隔符 5. 添加其他工具 6.…

精选案例 |《金融电子化》:光大银行云原生背景下的运维监控体系建设

顺应“十四五”规划中关于“加快金融机构数字化转型”要求,中国人民银行印发了《金融科技发展规划(2022-2025年)》。近几年来,金融行业牢牢占据着国内产业数字化转型市场投入的榜首位置。IDC调查显示,2022上半年&#…

北斗卫星信号类型及卫星颗数

文章目录一、北斗系统现阶段提供的公开服务信号二、北斗二号、三号卫星个数三、GNSS模块中的北斗信号参考来源这篇博客主要是整理一下北斗卫星现阶段提供的公开服务信号、二号和三号卫星个数,以及简单看看市场的GNSS模块对北斗信号的支持情况。一、北斗系统现阶段提…

智云通CRM:引起流单的三个问题,你了解了吗?

销售人员一般都会了解基本的销售流程,但是为什么还是出现了各种流单的问题?智云通CRM总结以下三个问题: 第一,采购流程是会发生反复的,不会一直向下走。 从整体上看,客户的采购流程遵循着上述规律&#x…

C++ 修改防火墙firewall设置(Windows)

文章目录1、简介1.1 防火墙概述1.2 入站,还是出站?1.3 防火墙规则优先级2、系统界面方式3、命令行方式3.1 防火墙基本状态设置3.2 入站出站规则设置3.3 其他设置3.4 telnet检测端口4、C方式4.1 注册表4.2 COM(Windows XP)4.3 COM&…

深度学习模型概念

Big data features: 5V--volume, velocity, variety, value, veracity.Big data challenges:高维、multi-modal、complexity、privacy 1. Federated Learning 联邦学习 Federated Learning:Server将model分散到各个用户user,clients利用本地…

不同相机之间图片像素对应关系求解(单应性矩阵求解)

一、场景 相机1和相机2相对位置不变,相机拍摄图片有重叠,求他们交叠部分的一一对应关系。数学语言描述为已知相机1图片中P点像素(u1, v1),相机1中P点在相机2图片中像素值为(u2, v2),它们存在某种变换,求变换矩阵。 因为…

计算机存储数字的本质,正码,反码,补码

计算机-原码 就是二进制定点表示法,即最高位为符号位:“0”表示正,“1”表示负,其余位表示数值的大小。 该数字不进行其他操作时数字最原始的二进制表示, 对于原码来说,绝对值相等的正数和负数只有符号位不…

高通平台开发系列讲解(USB篇)libuvc详解

文章目录 一、什么是UVC二、UVC拓扑结构三、libuvc的预览时序图沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍libuvc。 一、什么是UVC UVC,全称为:USB video(device) class。 UVC是微软与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标…

缓存雪崩 缓存击穿-总结

目录 缓存雪崩 缓存击穿-总结 缓存雪崩 出现场景: 解决方案: 缓存击穿 出现场景: 举例如图: 缓存击穿的三个前提: 解决方案: 缓存雪崩 缓存击穿-总结 缓存雪崩 出现场景: (1) 对于R…

用于隔离PWM的光耦合器选择和使用

光耦合器(或光隔离器)是一种将电路电隔离的器件,不仅在隔离方面非常出色,而且允许您连接到具有不同接地层或在不同电压电平下工作的电路。光耦合器具有“故障安全”功能,因为如果受到高于最大额定值的电压,…

3.1 OSPF引入路由

实验目的掌握OSPF引入静态路由的办法掌握OSPF引入直连路由的办法实验拓扑OSPF引入路由实验拓扑如图3-1所示: 图3-1:OSPF引入路由 实验步骤配置IP地址R1的配置 <Huawei>system-view [Huawei]undo info-center enabl

软件测试面试题中的sql题目你会做吗?

目录 1.学生表 2.一道SQL语句面试题&#xff0c;关于group by表内容&#xff1a; 3.表中有A B C三列,用SQL语句实现&#xff1a;当A列大于B列时选择A列否则选择B列&#xff0c;当B列大于C列时选择B列否则选择C列 4. 5.姓名&#xff1a;name 课程&#xff1a;subject 分数&…

node-sass按照失败

一、描述 从网上下载的一个Vue模板项目&#xff0c;导入VsCode&#xff0c;执行npm install命令后&#xff0c;报错了&#xff0c;报错的信息是node-sass安装失败&#xff0c;同时提示需要python环境的错误信息&#xff0c;这是因为安装node-sass失败了&#xff0c;而node-sas…

开源实时监控系统 HertzBeat 对 Linux 操作系统的监控告警实践

使用开源实时监控系统 HertzBeat 对 Linux 操作系统的监控告警实践&#xff0c;5分钟搞定&#xff01; HertzBeat 介绍 HertzBeat 是一款开源&#xff0c;易用友好的实时监控系统&#xff0c;无需Agent&#xff0c;拥有强大自定义监控能力。 集监控-告警-通知为一体&#xff0…

Spring入门案例三:注解进行引用类型的自动装配

本系列文章将会带领大家进行Spring的全面学习&#xff0c;持续关注我&#xff0c;不断更新中… 一.案例分级 简单解析:配置类替代以前的配置文件&#xff0c;实体类提供对象&#xff0c;业务类中有实体类的引用对象&#xff0c;在业务层中实现引用类的自动装配。 二.各层代码…

Java基础 -- 泛型

Java基础 -- 泛型1. Introduction1.1 好处1.2 常用泛型2. User Guide2.1 泛型类2.2 泛型方法2.3 泛型接口3. 限定泛型范围4. Awakening1. Introduction 1.1 好处 代码复用&#xff0c;多种数据类型执行相同的代码在编译期间可以检查类型是否安全&#xff0c;报警ClassCastExce…

什么是webpack

目录 1、什么是webpack&#xff08;必会&#xff09; 2、Webpack的优点是什么&#xff1f;&#xff08;必会&#xff09; 3、webpack的构建流程是什么?从读取配置到输出文件这个过程尽量说全&#xff08;必会&#xff09; 4、说一下 Webpack 的热更新原理(必会) 5、webpa…

为什么说接口幂等性很重要

先讲个故事大概三年前&#xff0c;外卖平台 Uber Eats 在印度发生了一次重大事故&#xff0c;使得用户可以免费获得食品。一天早上&#xff0c;有人试图通过印度的 Uber Eats 订购食物&#xff0c;并使用印度的支付平台 Paytm 付款。但是&#xff0c;他的账户里面没有足够的余额…

蓝牙耳机哪款性价比高音质好?2023公认音质最好的蓝牙耳机

如今音乐成了当下解压的方式之一&#xff0c;甚至是集中注意力的法器。耳机作为传播音乐的媒介&#xff0c;每个人对自己的专属耳机总有那么点小追求&#xff0c;高质量的耳机不仅保护双耳&#xff0c;带来的音质能让你的耳朵分分钟怀孕&#xff0c;下面分享几款2023年音质高的…