C语言从入门到精通第11天(数组的基本操作)

news/2024/4/26 11:43:13/文章来源:https://blog.csdn.net/m0_67021058/article/details/130351221

数组的基本操作

  • 数组的概念
  • 一维数组
  • 二维数组

数组的概念

在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式集合在一起,这些按序排列的同类数据元素的集合称为数组。

在C语言中,数组属于构造数据类型,一个数组可以分解为多个数组数组元素,这些数组的元素可以是基本数据类型或构造数据类型。因此按数组元素的类型不同,数组可分为数值数组、字符数组、指针数组、结构数组等各种类别。

注:
1)数组中的元素的内存地址是连续的
2)同一个数组所有的成员都是相同的数据类型

一维数组

1) 语法

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

  • 数组名的命名规范必须满足“标识符的命名规范”
  • 方括号中的常量表达式就是数组的长度,也就是数组中存储元素的个数

例如:

int a[10]:说明数组是整型数组,有10个元素。
float b[10],c[20]:说明数组是实型数组,数组b,有10个元素;数组c,有20个元素。
char ch[20]:说明数组是字符数数组,包含20个元素。

2) 一维数组的初始化
定义一个数组时,需要进行初始化的操作,如果不进行初始化,则数组的内容为随机值。给数组的赋值除了用赋值语句对数组元素逐个赋值外,还可以采用初始化赋值和动态赋值(这里涉及到指针,后面会进行讲解)的方法。

  • 逐个赋值法代码如下:
int main(){// 定义一个数组,不进行初始化int a[5];a[0] = 1;a[1] = 2;a[3] = 3;a[4] = 4;return 0;
}
  • 初始化赋值法代码如下:
int main() {// 定义一个数组,同时初始化所有成员变量int a[6] = {1, 2, 3, 4, 5, 6};// 初始化前三个成员,后面的所有元素都设置为0int b[6] = {1, 2, 3};// 所有的成员设置为0int c[6] = {0};// []中不定义元素个数,定义时必须初始化int d[] = {1, 2, 3, 4, 5};// 如果数组定义元素个数,如果不进行初始化,内容为随机值int e[3];// 输出为 0 0// 并没有进行初始化printf("%d %d",e[1],e[2]);return 0;
}

3) 使用下标访问数组中的元素

  • 下标的值必须为整型常量/变量
  • 下标的值从0开始到【数组长度(定义的数组常量)-1】结束

注: 如果使用的下标值大于或者等于数组长度,程序仍然可以编译通过,但是运行的结果时未知的。

代码如下:

int main(){// 定义一个数组,不进行初始化int a[5] = {1,2,3,4,5};// 对数组中的元素for(int i = 0;i<5;i++){printf("%d",a[i]);}// 最后一个元素的下标为4// 此时我们取出超过数组长度的值printf("%d",a[5]); // 输出  32758return 0;
}

下面我们来看以下这张图就知道为什么我们会输出这个值:

在这里插入图片描述
由此图可以看出我们内存是由高地址到地址进行排列,并且在内存中每个位置都有可能存储着相应的值,这是未知的。所以当我们取的值超出了数组范围,此时会调用我们内存中的未知值,所以输出了32758。

二维数组

1)语法

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

  • 我们可以将二维数组当作一个有行有列的二维矩阵
  • 常量表达式1代表矩阵的行数
  • 常量表达式2代表矩阵的列数
  • 二维数组可以理解为由”常量表达式1“个一维数组组成的

例如:

int a[3][4]:可以表示为一个3行4列的二维数组,数组中的元素类型为int类型。

2)二维数组的初始化
二维数组的初始化跟一维数组的初始化相差不大,并且他的存储方式跟一维数组的存储方式是一样的,他的赋值方法也有逐个赋值和初始化赋值。

  • 逐个赋值代码如下:
int main(){// 定义一个二维数组,不进行初始化int a[2][2];a[0][0] = 1;a[0][1] = 2;a[1][0] = 3;a[1][1] = 4;return 0;
}
  • 初始化赋值代码如下:
int main(){// 定义一个二维数组,进行分段赋值int a[2][2] = {{1,2},{3,4}};// 连续赋值,这里根据数组定义的行列进行自动分配int b[2][2] = {1,2,3,4};// 部分赋值,只给部分// 行列不够,用0来凑int c[3][3] = {1,2,3};// 输出第3行3列的元素printf("Output position 3 hang 3 lie: %d",c[2][2]);// 0值初始化int d[2][2] = {0};// 不指定行数// 此时会根据数组的列数进行自动计算行int e[][2] = {1,2,3,4};// 需要注意的是不能不指定列数// 如果不指定列数,那么数组就不能确定到底是有多少列// 他的情况就有很多种// 不指定将无法进行初始化,程序会报错// int f[3][] = {1,3,3,43,4,};return 0;
}

3)使用下标进行数组元素的访问

  • 行列下标的值必须为整型常量/变量
  • 列下标的值从0开始到【数组长度(定义的数组常量)-1】结束
  • 行下标的值从0开始到【数组长度(定义的数组常量)-1】结束

注: 如果使用的下标值大于或者等于数组长度,程序仍然可以编译通过,但是运行的结果时未知的。

代码如下:

int main() {// 定义一个2行2列的二维数组int a[2][2] = {{1, 2},{3, 4}};// 访问第3行第1个元素printf("%d",a[2][0]);  // 98564384return 0;
}

他的取值方式跟一维数组的操作方式实际上是差不多的,也是超出了数组的长度,程序不会报错,但是返回的值是未知的。

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

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

相关文章

Linux文本处理三大利器Grep、AWK、Sed

写在前面 Linux三剑客是文本处理工具&#xff0c;它们可以帮助我们快速、高效地对文本进行处理。其中包括了grep、awk、以及sed这三个强大的命令行工具。 Linux 三剑客主要作用: grep&#xff0c;它可以根据正则表达式查找相关内容并打印对应的数据。awk&#xff0c;它可以根…

C. Painting the Fence(思维 + 前缀和)

Problem - C - Codeforces You需要油漆一个由n个部分组成的长围栏。不幸的是&#xff0c;它没有被涂漆&#xff0c;所以你决定雇用q名画家来完成这项工作。第i名画家将会油漆所有满足lisxsri的部分x. 不幸的是&#xff0c;你的预算很紧&#xff0c;所以你只能雇用q-2名画家。显…

数据湖Iceberg-简介(1)

文章目录 Iceberg简介概述特性数据存储、计算引擎插件化实时流批一体数据表演化&#xff08;Table Evolution&#xff09;模式演化&#xff08;Schema Evolution&#xff09;分区演化&#xff08;Partition Evolution&#xff09;列顺序演化&#xff08;Sort Order Evolution&a…

itop-3568开发板驱动学习笔记(22)设备树(一)设备树基础

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录 设备树简介设备树编译设备树语法设备根节点设备子节点节点名称reg 属性#address-cell 和 #size-cells 属性model 属性status 属性compatible 属性aliases 节点chosen 节点device_type 属性自定义属性 设备树…

Linux云服务器的使用,以及运行Python程序

目录 1、使用Linux云服务器的软件 2、Linux系统运行Python程序 3、Linux系统查看包、虚拟环境、安装包等 以下几个深度学习服务器都不错&#xff1a;智星云、AutoDL、恒源云 1、使用Linux云服务器的软件 MobaXterm_Personal 推荐MobaXterm_Personal mobaxterm是一款方便网站…

数据库管理新定义:一款纯Web化免费SQL开发工具,免安装

SQL Studio是一款由麦聪软件研发的多数据库管理工具&#xff0c;提供Windows、Linux 和 MacOS三种版本的软件包&#xff0c;支持中英文两种语言。SQL Studio是用Java编写的&#xff0c;默认使用 JDK 8进行编译。 下载看这里: [SQLStudio] (http://www.maicongs.com/#/home/web)…

地热井监测控制系统解决方案

概述 地热井监测控制系统主要是对地热井采水和回灌进行流量、温度、水位&#xff08;压力&#xff09;等参数的实时监测&#xff0c;对地热站现场环境进行实时视频监控。地热井现场和取水井、回灌井安装监测装置&#xff0c;通过无线传输设备将数据实时传输至自然资源局已建中…

上海车展:预售价109.8万元,仰望U8见证国产品牌崛起

如果要评选2023上海车展上比亚迪展台“最亮的星”&#xff0c;估计很多媒体和观众都会毫不迟疑地把票投给仰望U8。 没办法&#xff0c;因为在本届车展上&#xff0c;仰望U8的表现实在是太吸睛了。 作为比亚迪旗下的高端新能源品牌&#xff0c;仰望汽车在上海车展上携两款车型—…

【Leetcode -141.环形链表 -2.两数相加】

Leetcode Leetcode -141.环形链表Leetcode -2.两数相加 Leetcode -141.环形链表 题目&#xff1a;给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给…

测试Ocr工具IronOCR(续2:编写圈选图片识别文本的程序)

上篇文章介绍了加载图片并圈选图片中文字区域的程序实现方式&#xff0c;本文基于此实现识别圈选区域文字内容的程序。主要识别语言包括英文和中文。IronOCR包中自带英文语言包&#xff0c;项目还需安装中文语言包&#xff0c;建议直接安装IronOcr.Languages.Chinese语言包&…

什么样的测试才是优秀的测试

什么样的测试才是优秀的测试 优秀的测试应该包括以下要素&#xff1a; 测试代码的可读性和可维护性 代码在项目中及特定源代码中的组织方式 测试所检查的内容 测试的可靠性及可重复性 测试对测试替身的使用 可读的代码才是可维护的代码 代码较差的可读性与缺陷密度密切相…

软件测试技术那么多,我们该如何分辨?

经典软件测试技术分类&#xff1a; 测试技术是指顺利完成测试的一系列相关过程&#xff0c;有很多可能的分类方式&#xff0c;表2-1就是其中的一种。表中列出了流行的测试技术&#xff0c;也按照上面的讨论对其进行分类&#xff1a;手工测试、自动测试、静态测试、动态测试、功…

今年SMETA审核费用即将涨价

【今年SMETA审核费用即将涨价】 SMETA全称&#xff08; Sedex Members Ethical Trade Audit &#xff09;&#xff0c;即Sedex会员社会道德贸易审核&#xff0c;它是Sedex发起的一种负责任的供应链审计方法/项目。 Sedex是一个全球性的责任商业平台&#xff0c;SMETA是审核方法…

手推FlinkML2.2(三)

SQLTransformer&#xff08;SQL转换器&#xff09;是一种数据预处理方法&#xff0c;允许您使用SQL语句对数据进行转换和操作。SQL转换器通常用于数据清洗、特征工程和数据聚合等任务&#xff0c;以提高数据分析和机器学习模型的性能。它可以与各种数据处理和存储系统&#xff…

本地搭建属于自己的ChatGPT:基于PyTorch+ChatGLM-6b+Streamlit+QDrant+DuckDuckGo

本地部署chatglm及缓解时效性问题的思路&#xff1a; 模型使用chatglm-6b 4bit&#xff0c;推理使用hugging face&#xff0c;前端应用使用streamlit或者gradio。 微调对显存要求较高&#xff0c;还没试验。可以结合LoRA进行微调。 缓解时效性问题&#xff1a;通过本地数据库…

你的车有通风座椅吗?新款奔驰S400升级原厂主副驾座椅通风

大家好&#xff0c;我是奔之升小志&#xff08;bzs878&#xff09;&#xff0c;专注名车原厂升级&#xff0c;欢迎戳戳右上角“”号关注一下&#xff0c;持续为您带来精彩改装案例。 座椅通风有什么用&#xff1f;能改善身体与座椅接触面空气流通&#xff0c;达到不出汗的效果…

选择美国虚拟主机需注意的安全问题

在选择美国虚拟主机时&#xff0c;安全性应该是您首要关注的问题。虚拟主机通常是网站托管的最便宜和最方便的方式之一&#xff0c;但也存在安全问题。在本文中&#xff0c;我们将讨论一些您应该注意的安全问题&#xff0c;并提供一些解决方案来保护您的网站。 一、了解虚拟主机…

C++(继承(上))

目录 &#xff1a; 1.引出继承的概念 2.继承的关系和方式 3.继承中的作用域 ------------------------------------------------------------------------------------------------------------------------------ 1.引出继承的概念 这些学生、老师、后勤都具有相同的特征&…

elementUI-el-table组件使用总结

一、背景 vue2项目中用到el-table这个组件&#xff0c;但基础的功能不够用&#xff0c;所以需要自定义 二、表头自定义 比如要让表头展现出下面的形式&#xff1a; 只需使用 slot"header" slot-scope"scope" 对插槽进行定义&#xff0c;并绑定变量 <…

CPU Cache:访问存储速度是如何大幅提升的?

我们了解到不同的物理器件&#xff0c;它们的访问速度是不一样的&#xff1a;速度快的往往代价高、容量小&#xff1b;代价低且容量大的&#xff0c;速度通常比较慢。为了充分发挥各种器件的优点&#xff0c;计算机存储数据的物理器件不会只选择一种&#xff0c;而是以 CPU 为核…