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

news/2024/10/18 7:54:13/

数组的基本操作

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

数组的概念

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

在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.ppmy.cn/news/55544.html

相关文章

三维可视化智慧档案馆之八防环境监控系统平台白皮书

目录 一、智慧档案馆建设目的 二、智慧档案馆集成度 三、智慧档案馆架构 3.1库房环境监测 3.2库房安防监控 四、智慧档案馆功能简介 4.1档案室一体化控制管理系统建设方案 4.2温湿度检测建设方案 4.3恒温控制建设方案 4.4烟雾感应检测系统 4.5安防系统建设…

SignOff Criteria——OCV applied and results

文章目录 1. O v e r v i e w Overview Overview1.1 w h a t i s o c v what\ is\ ocv what is ocv&#xff1f;1.2 O C V . E f f e c t o n s i g n o f f OCV.\ Effect\ on\ signoff OCV. Effect on signoff1.3 H o w t o r e m o v e t h e e f f e c t s o f O C V Ho…

bash的进程与欢迎讯息自定义

在bash shell中,可以通过多种方式自定义欢迎讯息和提示符。主要有: 修改/etc/profile文件: 该文件在用户登录后执行,定义了PROMPT_COMMAND和PS1提示符。可以修改其内容实现自定义欢迎讯息和提示符。 例如,修改为: bash PROMPT_COMMANDecho -e "\nWelcome to My Bash She…

计算机网络学习04(应用层常见协议总结)

1、HTTP:超文本传输协议 超文本传输协议&#xff08;HTTP&#xff0c;HyperText Transfer Protocol) 是一种用于传输超文本和多媒体内容的协议&#xff0c;主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候&#xff0c;我们网页就是通过 …

基于html+css的图展示44

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

macOS 13.4Beta 3(22F5049e)With OpenCore 0.9.2开发版 and winPE双引导分区原版镜像

镜像特点 完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引导分区&#xff08;如有需要&#xff0c;可以自行直接替换opencore分区文件为clover引导文件&#xff09;备注…

有理函数的不定积分习题

前置知识&#xff1a;有理函数的不定积分 习题 计算 ∫ x 3 1 x 4 − 3 x 3 3 x 2 − x d x \int \dfrac{x^31}{x^4-3x^33x^2-x}dx ∫x4−3x33x2−xx31​dx 解&#xff1a; \qquad 将被积函数的分母因式分解得 x 4 − 3 x 3 3 x 2 − x x ( x − 1 ) 3 x^4-3x^33x^2-xx…

Vue CLI vue.config.js 配置参考

全局 CLI 配置 有些针对 vue/cli 的全局配置&#xff0c;例如你惯用的包管理器和你本地保存的 preset&#xff0c;都保存在 home 目录下一个名叫 .vuerc 的 JSON 文件。你可以用编辑器直接编辑这个文件来更改已保存的选项。 你也可以使用 vue config 命令来审查或修改全局的 …