C语言数组

数组

一维数组

定义一维数组

定义一维数组的一般形式:

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

其中:

  • 数组名的命名规则和变量名相同,遵循标识符命名规则。
  • 常量表达式的值表示数组中元素的个数,也称为数组的长度。
  • 常量表达式可以包含常量、const 变量和符号常量,但不能包含变量。

数组下标

为了存取特定的数组元素,可以在写数组名的同时在后边加上一个用方括号围绕的整数值(称这是对数组取下标或进行索引)。
数组元素的一般形式为:

		        数组名[下标]

其中,下标只能为整型常量或整型表达式。
数组元素始终从 0 开始,所以长度为 n 的数组元素的索引是从 0 到 n-1。
在声明数组并对其中各元素赋值后,就可以引用数组中的元素。
数组元素可以像普通变量一样使用。

int a[10]; //整型数组,数组名为 a,包含 10 个整型元素。
int i = 2;
a[0] = 1;  //数组首个元素赋值,值为 1 
a[9] = i;  //数组最后一个元素值为 2 
int j = a[0]; //数组元素赋予变量 j 

一般说来,如果数组包含 T 类型的元素,那么数组中的每个元素均视为 T 类型的变量。
注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值。

int a[10]; //未初始化的数组
/*逐个数组元素赋值*/
for (int i = 0; i < 10; ++i)
{a[i] = i + 1;
}
/*遍历数组*/
for (int i = 0; i < 10; ++i)
{printf("%d ", a[i]);
}

一维数组的初始化

数组的初始化可以用初始化列表(以下)的方式实现。
数组中各元素的初值顺序放在一对花括号内,数据间用逗号分隔。

  1. 在定义数组时对全部数组元素赋予初值。
    例:int a[5] = {1,2,3,4,5};
  2. 可以只对一部分元素赋值,剩余未被赋予初值的元素赋予默认值0。
    例:int a[5] = {1,2,3}; //等价于int a[5] = {1,2,3,0,0};
  3. 数组初始化为0。
    例:int a[5] = {0}
  4. 在对全部数组元素赋初值时,可以不指定数组长度,系统自动定长。
    例:int a[] = [1,2,3,4,5];
    如果想要的数组长度与提供的初值个数不相同,则数组长度不能省略。

指定初始化

C99允许数组指定初始化:

int a[10] = {[1] = 9,[3] = 10,[5] = 6};//数组元素1为9,元素3为10,元素5为6,其余元素为0。

中括号中的数字称为指示符。
指示符必须是整型常量表达式。
如果待初始化的数组长度为 n,则每个指示符的值都必须在 0 和 n-1 之间。
如果数组的长度是省略的,指示符可以是任意非负整数。
对于有指示符情况,编译器将根据最大的指示符推断出数组的长度。

int a[] = {[1] = 11,[9] = 10,[5] = 6}; //指示符最大值是9,因此数组长度为10

初始化式中可以同时使用老方法(逐个元素初始化)和新方法(指定初始化式):

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

二维数组

声明二维数组

声明二维数组的一般形式是:

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

其中:
常量表达式 1 表示第一维下标的长度,表示“行”。
常量表达式 2 表示第二维下标的长度,表示“列”。
C语言对二维数组采用这样的定义方式,使得二维数组可被看作是一种特殊的一维数组:它的元素又是一个一维数组。
例,声明一个二维数组:

int a[3][4];

可以把 a 看作是一个一维数组,它有3个元素:a[0],a[l],a[2]
每个元素又是一个包含4个元素的一维数组:

	a[0] ------ a[0][0] a[0][1] a[0][2] a[0][3]a[l] ------ a[l][O] a[1][1] a[1][2] a[1][3]a[2] ------ a[2][0] a[2][l] a[2][2] a[2][3]

必须强调的是,a[0],a[l],a[2]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。
注意:用矩阵形式(如3行4列形式)表示二维数组,是逻辑上的概念,能形象地表示出行列关系;在内存中,各元素是按行连续存放的,是线性的。

二维数组的下标

二维数组下标的一般形式:

				数组名[下标][下标]

其中,下标应为整型常量或整型表达式。
数组元素是左值,可以出现在表达式中,也可以被赋值。

二维数组的初始化

  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. 二维数组可只对部分元素赋初值,后面未赋初值的元素自动取 0 值。
    例1:int a[3][4]={{1},{0,5},{0,11}}; //省略行内元素
    例2:int a[3][4]={{1},{},{11}}; //省略行
  4. 全部元素赋初值,则第1维的长度(行数)可以省略,但第 2 维的长度(列数)可以不能省。
    例1:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //连续赋初值
    例2:int a[][4]={{1},{},{11}}; //省略行

C99的指定初始化式对多维数组也有效。

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

没有指定值的元素都默认置为0。

常量数组

无论一维数组还是多维数组,都可以通过在声明的最开始处加上单词 const 而成为"常量":

const char hex_chars[] = {'A','B','C','D','E'};

程序不应该对声明为 const 的数组进行修改,编译器能够检测到直接修改某个元素的意图。

变长数组

数组变量的长度必须用常量表达式进行定义;但是在C99中,有时候也可以使用非常量表达式。

int a[n];

变长数组的长度不一定要用变量来指定,可以是任意表达式(可以含有运算符)。

int a[3 * i + 5];

变长数组(variable-length array 简称 VLA )的长度是在程序执行时计算的,而不是在程序编译时计算的。
变长数组的主要限制是它们没有静态存储期限,另一个限制是变长数组没有初始化式。

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

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

相关文章

Linux云服务器打包部署前端Vue项目

1. 打包 在项目包的终端使用命令打包成dist文件。 npm run build2. Linux云服务器上创建文件夹 mkdir /home/www/dist注&#xff1a;dist文件夹不用创建&#xff0c;将打包好的dist.zip放进去&#xff0c;然后解压就行。 3. 安装nginx yum install -y nginx4. 修改配置文件…

Spark-06:Spark 共享变量

目录 1.广播变量&#xff08;broadcast variables&#xff09; 2.累加器&#xff08;accumulators&#xff09; 在分布式计算中&#xff0c;当在集群的多个节点上并行运行函数时&#xff0c;默认情况下&#xff0c;每个任务都会获得函数中使用到的变量的一个副本。如果变量很…

Android 相机库CameraView源码解析 (一) : 预览

1. 前言 这段时间&#xff0c;在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位&#xff0c;在项目前期&#xff0c;的确为我们节省了不少时间。 但随着项目持续深入&#xff0c;对于CameraView的使用进入深水区&#xff0c;逐…

【LeetCode】挑战100天 Day17(热题+面试经典150题)

【LeetCode】挑战100天 Day17&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-192.1 题目2.2 题解 三、面试经典 150 题-193.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…

java stream流常用方法

filter(Predicate predicate)&#xff1a;根据指定条件过滤元素。 List<Integer> numbers Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); List<Integer> evenNumbers numbers.stream().filter(n -> n % 2 0).collect(Collectors.toList()); System.out.pr…

VS2010 VS2015环境编译boost库

VS2010下安装boost库 去www.boost.org下载最新的boost&#xff0c;我下载了boost_1_46_1.7z&#xff08;我放在D:/cpp目录下&#xff09;解压到当前文件夹打开VS2010->VS TOOLS->VS命令提示CD D:/cpp/boost_1_46_1输入bootstrap&#xff0c;便生成bjam.exe文件输入bjam …

[建议收藏] 一个网站集合所有最新最全的AI工具

今天给大家推荐一个宝藏的AI工具合集网站&#xff0c;有了这个网站&#xff0c;你们再也不用去其他地方找AI工具了。 名称&#xff1a;AI-BOT工具集 这个网站精选1000AI工具&#xff0c;并持续每天更新添加&#xff0c;包括AI写作、AI绘画、AI音视频处理、AI平面设计、AI自动编…

Atcoder Beginner Contest 330——A~F题

A - Counting Passes Description Problem Statement N N N people labeled 1 , 2 , … , N 1,2,\dots,N 1,2,…,N took an exam, and person i i i scored A i A_i Ai​ points. Only those who scored at least L L L points pass this exam. Determine how many peopl…

SpringBoot:邮件发送

官网文档&#xff1a;39. Sending Email (spring.io)。 Sending Email Spring框架提供了JavaMailSender实例&#xff0c;用于发送邮件。 如果SpringBoot项目中包含了相关的启动器&#xff0c;那么就会自动装配一个Bean实例到项目中。 在SpringBoot项目中引入如下Email启动器&a…

Add, Divide and Floor(cf round 158 div2)

题目&#xff1a;给你一个整数数组 a1,a2,…,an 。在一次操作中&#xff0c;你可以选择一个整数 x &#xff0c;并用 (a[i]x)/2 替换 ai ( (a[i]x)/2表示将 y(a[i]x)/2舍入为最接近的整数(下取整)。 ⌊y⌋ 表示将 y 舍入为最接近的整数&#xff09;来替换从 1 到 n 的所有 i。…

【数据分享】2019-2023年我国区县逐月新房房价数据(Excel/Shp格式)

房价是一个城市发展程度的重要体现&#xff0c;一个城市的房价越高通常代表这个城市越发达&#xff0c;对于人口的吸引力越大&#xff01;因此&#xff0c;房价数据是我们在各项城市研究中都非常常用的数据&#xff01;之前我们分享过2019-2023年我国地级市逐月房价数据&#x…

Spring Boot 项目中读取 YAML 文件中的数组、集合和 HashMap

在 Spring Boot 项目中&#xff0c;我们经常使用 YAML 文件来配置应用程序的属性。在这篇博客中&#xff0c;我将模拟如何在 Java 的 Spring Boot 项目中读取 YAML 文件中的数组、集合和 HashMap。 1. 介绍 YAML&#xff08;YAML Aint Markup Language&#xff09;是一种人类…

OpenMp并行编程

目录 介绍编译用法>OpenMp parallel>OpenMp for>OpenMp private、firstprivate、lastprivate>OpenMp section>OpenMp reduction>OpenMp single>OpenMp master>OpenMp barrier OpenMp的API函数 介绍 OpenMp是一种并行编程模型&#xff0c;旨在简化多线…

【Spring集成MyBatis】MyBatis注解开发

文章目录 1. MyBatis的常用注解2. 基于注解的MyBatis增删改查增删改查完整代码加载映射关系测试代码 3. MyBatis的注解实现复杂映射开发一对一操作的实现一对一操作实现的第二种方式一对多操作的实现多对多操作实现 1. MyBatis的常用注解 2. 基于注解的MyBatis增删改查 使用注…

Linux加强篇004-Vim编辑器与Shell命令脚本

目录 前言 1. Vim文本编辑器 1.1 编写简单文档 1.2 配置主机名称 1.3 配置网卡信息 1.4 配置软件仓库 2. 编写Shell脚本 2.1 编写简单的脚本 2.2 接收用户的参数 2.3 判断用户的参数 3. 流程控制语句 3.1 if条件测试语句 3.2 for条件循环语句 3.3 while条件循环语…

【开源】基于JAVA的高校学院网站

项目编号&#xff1a; S 020 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S020&#xff0c;文末获取源码。} 项目编号&#xff1a;S020&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学院院系模块2.2 竞赛报名模块2.3 教…

Postman如何使用(三):使用数据文件

数据文件是非常强大的方式使用不同的测试数据来测试我们的API&#xff0c;以检查它们是否在各种情况下都能正常运行。我们可以认为数据文件是“Collection Runner”中每个请求的参数。下面&#xff0c;我们通过一个例子来说明如何使用数据文件。 这篇文章需要结合下面两个文件进…

史上最全前端知识点+高频面试题合集,十二大专题,命中率高达95%

前言&#xff1a; 下面分享一些关于阿里&#xff0c;美团&#xff0c;深信服等公司的面经&#xff0c;供大家参考一下。大家也可以去收集一些其他的面试题&#xff0c;可以通过面试题来看看自己有哪里不足。也可以了解自己想去的公司会问什么问题&#xff0c;进行有针对的复习。…

PowerShell基础

1. Tab键补全 有时候不记得指令全称&#xff0c;只记得开头几个字母&#xff0c;使用Tab键可显式建议选项&#xff0c;再次按Tab可以往后翻&#xff0c;ShiftTab可以往前翻。 2. 查看指令类型 Get-Command -Name Get-Alias 指令是遵循一定的格式规范的&#xff0c;如动词加名…

css之选择第一个或最后一个元素、第n个标签、选择偶数或奇数标签、选择最后n个标签、等差数列标签的选择、first、last、nth、child

MENU first-child选择列表中的第一个标签last-child选择列表中的最后一个标签nth-child(n)选择列表中的第n个标签nth-child(2n)选择列表中的偶数位标签nth-child(2n-1)选择列表中的奇数位标签nth-child(nm)选择从第m个到最后一个标签nth-child(-nm)选择从第1个到第m个nth-last-…