C语言数组介绍和用法

news2024/11/26 20:39:44

文章目录

  • 前言
  • 一、数组的定义
  • 二、数组的大小
  • 三、数组的访问方法
  • 四、使用for循环遍历数组
  • 五、数组地址的访问方法
  • 六、二维数组
  • 七、二维数组的遍历
  • 总结


前言

本篇文章将带大家学习C语言中的数组,数组在C语言中是一个比较重要的点,大家需要好好理解并多加使用练习。

一、数组的定义

在 C 语言中,数组是一组同类型的元素的集合。数组中的每个元素都可以通过它的下标访问,并且下标是从0开始的整数值。举个例子,下面是一个包含5个整数的数组:

int numbers[5] = {1, 2, 3, 4, 5};

我们也可以定义float和double类型的数组:

float numbers[5] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
double numbers[5] = { 1.0, 2.0, 3.0, 4.0, 5.0 };

二、数组的大小

在 C 语言中,可以使用 sizeof() 运算符来获取一个数组的大小,即数组在内存中占用的字节数。例如,假设有一个整数数组 arr,可以使用以下代码获取该数组的大小:

int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(int);

在上述代码中,sizeof(arr) 返回的是整个数组在内存中的字节数,sizeof(int) 返回一个整数类型占用的字节数。由于 arr 中包含5个整数,因此可以通过除以一个整数元素的字节数来计算数组的大小,结果为5。

数组总大小为数组元素类型大小 * 数组元素总个数

三、数组的访问方法

在 C 语言中,数组的访问通常通过下标来实现,即使用数组名和方括号内的索引来访问数组中的元素。例如,假设有以下整型数组:

int arr[5] = {1, 2, 3, 4, 5};

访问数组中的元素通常使用下标,如下所示:

int first = arr[0];    // 获取数组中的第一个元素
int third = arr[2];    // 获取数组中的第三个元素
arr[4] = 6;            // 修改数组中的第五个元素

需要注意的是,数组的下标从0开始,因此第一个元素的下标是0,最后一个元素的下标是数组大小-1

四、使用for循环遍历数组

在 C 语言中,可以使用 for 循环遍历数组中的元素。通常情况下,可以使用数组大小来控制循环的次数。以下是遍历整型数组的示例代码:

int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(int);   // 获取数组大小

for (int i = 0; i < size; i++) {    // 遍历数组
    printf("%d ", arr[i]);
}

在上面的代码中,首先计算出数组的大小,然后使用 for 循环遍历数组中的每个元素,输出其值。循环变量 i 作为数组的索引,从0开始到 size-1 结束。

需要注意的是,数组下标必须在合法的范围内,否则可能导致未定义的行为,例如访问越界内存。在遍历数组时,要保证数组下标不超过数组大小的范围,否则会导致程序错误。

五、数组地址的访问方法

每一个数组在内存中都会有一块属于自己的内存空间,那么我们如何来知道这块内存空间的地址呢?

在 C 语言中,可以使用数组名来获取数组的首地址,即数组中第一个元素的内存地址。对于一维数组,数组名即为数组的首地址。

例如,假设有以下整型数组:

int arr[5] = {1, 2, 3, 4, 5};

那么我们访问数组地址的方法有两种:
一种是通过数组名来访问
一种是通过对数组第一个元素取地址来访问

printf("%d\n", arr);
printf("%d\n", &arr[0]);

其实这两种访问的方法是有区别的。

使用数组名访问数组地址,可以得到整个数组在内存中的起始地址,即数组第一个元素的地址。

而使用数组第一个元素访问数组地址是指通过指向数组第一个元素的指针来访问数组元素的地址。

因为数组的第一个元素的地址就是数组在内存中的起始地址。所以使用这两种方法访问得到的结果都是相同的。

在这里插入图片描述

六、二维数组

在 C 语言中,二维数组是指由多行和多列构成的数组。二维数组可以看作是一种特殊的数组,它可以通过行和列的下标来访问数组中的元素。二维数组的定义可以使用以下语法:

int arr[row][col];

其中 row 和 col 分别指定了二维数组的行数和列数。例如,下面是一个声明了 3 行 4 列的二维整型数组的示例代码:

int arr[3][4];

可以使用类似于一维数组的方式对二维数组进行初始化。例如,以下代码将二维数组初始化为一个单位矩阵:

int identity[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};

访问二维数组的元素可以使用类似于访问一维数组的方式。例如,以下代码将访问二维数组中第二行第三列的元素:

arr[1][2] = 10;

需要注意的是,二维数组的行和列都是从 0 开始编号的。因此,二维数组的行数可以使用 sizeof(arr) / sizeof(arr[0]) 来计算,列数可以使用 sizeof(arr[0]) / sizeof(arr[0][0]) 来计算。

七、二维数组的遍历

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

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        printf("%d ", arr[i][j]);
    }
    printf("\n");
}

这个示例代码中,二维数组 arr 被初始化为一个 3 行 4 列的矩阵,使用嵌套的两个 for 循环遍历了数组中的所有元素。对于每个元素,使用 arr[i][j] 的方式来获取它的值,并使用 printf 函数输出结果。

需要注意的是,在使用 for 循环遍历二维数组时,外层循环变量控制行,内层循环变量控制列。在每次循环中,使用 arr[i][j] 表示第 i 行第 j 列的元素。循环变量的初始值和终止条件可以根据数组的大小进行相应的调整。

结果:
在这里插入图片描述

总结

本篇文章讲解了数组的基本概念及数组的访问方法,这些知识点大家需要好好理解并加以练习。

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

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

相关文章

Linux Shell 介绍及常用命令汇总

文章目录 Part.I shell 简介Chap.I 概念汇编Chap.II 命令概览 Part.II shell 常用命令大全Chap.I 关于文件和目录Chap.II 关于磁盘和内存Chap.III 关于进程调度 Reference Part.I shell 简介 Chap.I 概念汇编 下面是一些概念 shell 与 bash 的区别与联系&#xff1a;bash 是 b…

2023五一杯B题:快递需求分析问题

题目 网络购物作为一种重要的消费方式&#xff0c;带动着快递服务需求飞速增长&#xff0c;为我国经济发展做出了重要贡献。准确地预测快递运输需求数量对于快递公司布局仓库站点、节约存储成本、规划运输线路等具有重要的意义。附件1、附件2、附件3为国内某快递公司记录的部分…

从力的角度再次比较9-2分布和8-3分布

( A, B )---1*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有1个节点&#xff0c;AB各由11张二值化的图片组成&#xff0c;让A中有3个0&#xff0c;8个1.B中全是0&#xff0c;排列组合A的所有可能&#xff0c;统计迭代次数的顺序。在前面实验中得到了8-3分布的数据 A-B 迭代次数 …

孔乙己文学,满街长衫,为谁而穿?解构孔乙己文学

鲁迅先生创作《孔乙己》的背景是20世纪初期的中国社会。那时&#xff0c;中国正处于民国的初期&#xff0c;社会动荡不安&#xff0c;人民生活贫困。在这个背景下&#xff0c;鲁迅开始写作并发表了一系列揭露社会黑暗面的作品。《孔乙己》是其中之一&#xff0c;它讲述了一个被…

利用snpEff对基因型VCF文件进行变异注释的详细方法

利用snpEff对VCF文件进行变异注释 群体遗传研究中&#xff0c;在获得SNP位点后,我们需要对SNP位点进行注释&#xff0c;对这些SNP位点进行更深的了解。 snpEff是一个用于对基因组单核苷酸多态性(SNP)进行注释的软件&#xff0c;snpEff软件可以用于对VCF文件进行变异注释&#x…

VC++ | VS2017编译报错-20230428

VC | VS2017编译报错-20230428 文章目录 VC | VS2017编译报错-202304281.报错1-1.解决办法 2.报错2-1.解决办法2-1-1.做如下设置2-1-2.代码调整 1.报错 1>------ 已启动生成: 项目: NvtUSBTool, 配置: Debug Win32 ------ 1>NvtUSBTool.cpp 1>$(PRJ_ROOT_DIR)nvtusbt…

Linux文件系统权限

目录标题 文件权限文件和目录的一般权限文件的权限针对三类对象进行定义文件和目录中&#xff0c;r、w、x的作用 设置文件和目录的一般权限修改文件或目录的权限—chmod(change mode)命令权限值的表示方法—使用3位八进制数表示权限值的表示方法—使用字符串表示修改文件或目录…

视频转gif如何做?三步教你视频转gif制作

如何将视频做成gif表情包呢&#xff1f;想要把视频中的精彩画面截取出来做成gif动画表情&#xff0c;却又不想下载软件的时候&#xff0c;该怎么办呢&#xff1f;有没有简单实用的工具呢&#xff1f; 一、什么工具能够截取视频做gif呢&#xff1f; GIF中文网作为一款专业的在…

react之按钮鉴权

使用HOC来完成 HOC&#xff1a;高阶组件&#xff0c;是React中复用组件逻辑的一种高级技巧。HOC自身不是React API的一部分&#xff0c;他是一种基于React的组合特性而形成的设计模式。 作用&#xff1a;用于复用组件的业务逻辑 VUE mixinReact Hoc 用户数据渲染带操作按钮渲…

C#手术麻醉临床信息系统源码,实现体征数据自动采集绘制

手麻系统源码&#xff0c;自动生成电子单据 基于C# 前端框架&#xff1a;Winform后端框架&#xff1a;WCF 数据库&#xff1a;sqlserver 开发的手术麻醉临床信息系统源码&#xff0c;应用于医院手术室、麻醉科室的计算机软件系统。该系统针对整个围术期&#xff0c;对病人进…

本地安装kibana kibana设置中文汉化

一、Kibana简介 Kibana是一个开源的基于浏览器的分析和可视化平台&#xff0c;可以用于搜索&#xff0c;查看&#xff0c;删除Elasticsearch索引并与存储在Elasticsearch索引中的数据进行交互。可以执行高级数据分析&#xff0c;并且以各种图标、表格和地图的形式可视化数据。…

【hello Linux】进程信号

目录 1. 进程信号的引出及整体概况 2. 信号的产生 1. 键盘产生 2. 进程异常 3. 系统调用 4. 软件条件 3. 信号的保存 1. 信号相关的常见概念 2. sigset_t 3. 信号集操作函数 4. sigprocmask&#xff1a;对block位图的操作 5. sigpending&#xff1a;对pending位图的操作 6. 捕捉…

三分钟看懂Python分支循环规范:if elif for while

人生苦短&#xff0c;我用python 分支与循环 条件是分支与循环中最为核心的点&#xff0c; 解决的问题场景是不同的问题有不同的处理逻辑。 当满足单个或者多个条件或者不满足条件进入分支和循环&#xff0c; 这里也就说明这个对相同问题处理执行逻辑依据具体参数动态变化&…

智慧医疗服务平台有哪些优势?

对于引用了智慧医疗服务平台的机构来说&#xff0c;其优势体现在哪些方面呢&#xff1f; 一、提高医疗资源利用效率。 在传统的医疗模式中&#xff0c;医生需要耗费大量的时间和精力去处理病人的病历、诊断、治疗等问题。而在智慧医疗服务平台的支持下&#xff0…

稳定排序和不稳定排序

稳定排序和不稳定排序 稳定排序 插入排序、冒泡排序、归并排序、基数排序 其时间复杂度 直接插入排序 最好情况:初始有序,为O(n); 最坏情况:初始逆序,为O(n) 平均时间复杂度T(n) O(n) 折半插入排序 时间复杂度为O(n) 冒泡排序 最好时&#xff0c;基本有序&#xff0c;…

Python 科研绘图可视化(后处理)Matplotlib - 2D彩图

Introduction 科研可视化是将数据和信息转化为可视化形式的过程&#xff0c;旨在通过图形化展示数据和信息&#xff0c;使得科研工作者能够更好地理解和分析数据&#xff0c;并从中发现新的知识和洞见。科研可视化可以应用于各种领域&#xff0c;如生物学、物理学、计算机科学…

制造策略 ETO、MTO、ATO、MTS

ETO 按交货周期跨度从长到短来讲&#xff0c;首先就是 ETO&#xff0c;Engineer To Order – 面向订单设计、定制生产或特殊生产。 就是客户给的订单&#xff0c;你要生产的话&#xff0c;你之前的原产品改动很大&#xff0c;或者基本上用不上&#xff0c;要完全按照客户的要求…

虚机制

一、虚机制的引入 利用动态编联实现——虚函数来解决上述问题 二、虚函数 必须是实例方法&#xff0c;不能是类方法。 若基类中析构函数为虚函数&#xff0c;则派生类中的析构函数不论写不写virtual关键字都是虚函数。派生类中新的虚函数应尽量避免与基类中的虚函数重名。 三、…

java基础知识——24.泛型

这篇文章我们来讲一下java的泛型 目录 1.什么是泛型 1.1 泛型的概念 1.2 泛型的好处 1.3 粗看泛型集合的源码 2.泛型类 2.1 泛型类的定义 2.2 从泛型类派生子类 3.泛型接口 4.泛型方法 5.类型通配符 5.1类型通配符上限 5.2 类型通配符的下限 6.类型擦除 6.1无限…

HTML(三) -- 表单设计

目录 1. 基本语法 2. 表单控件 2.1 input控件 input 常用属性&#xff1a; input type的表单项&#xff1a; 2.2 select 控件 2.3 textarea控件 2.4 label 控件 为什么需要表单&#xff1f; 在我们网页中&#xff0c; 无论是提交搜索的信息&#xff0c;还是网上注…