当前位置: 首页 > news >正文

【C语言极简自学笔记】C 语言数组详解:一维数组与二维数组

在 C 语言中,数组是一种非常重要的数据结构,它可以将多个相同类型的元素组织在一起,以便于我们进行批量处理和操作。本文将详细介绍 C 语言中的一维数组和二维数组,包括它们的定义、初始化、元素访问以及内存存储等方面的内容。

一、数组基本概念

数组是一组相同类型元素的集合,这些元素在内存中占据连续的存储空间。数组的元素可以通过下标来访问,下标从 0 开始。C 语言支持一维数组、二维数组以及多维数组,本文主要讨论一维数组和二维数组。

二、一维数组

(一)一维数组的定义

在 C 语言中,定义一维数组的一般形式为:

数据类型 数组名[数组长度];

其中,数据类型可以是 int、float、char 等基本数据类型,也可以是结构体等用户自定义数据类型;数组名是一个标识符,用于标识这个数组;数组长度必须是一个常量表达式,表示数组中元素的个数。 

例如,定义一个包含 5 个整型元素的数组:

int arr[5];

(二)一维数组的初始化

在定义数组的同时,可以对数组进行初始化,一维数组的初始化方式有以下几种:

1.完全初始化:给数组的每个元素都赋初值。

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

 2.不完全初始化:只给数组的前几个元素赋初值,后面未赋值的元素会自动初始化为 0(对于整型数组)或 0.0(对于浮点型数组)。

int arr[5] = {1, 2}; // 等价于{1, 2, 0, 0, 0}

3.省略数组长度初始化:在初始化时不指定数组的长度,编译器会根据初始化列表中的元素个数自动确定数组的长度。

int arr[] = {1, 2, 3, 4, 5}; // 数组长度为5

(三)一维数组元素的访问

数组元素可以通过下标来访问,下标的范围是 0 到数组长度减 1。例如,对于上面定义的数组 arr,它的元素可以表示为 arr [0]、arr [1]、arr [2]、arr [3]、arr [4]。

我们可以通过赋值语句给数组元素赋值,也可以通过输入函数从键盘读取值赋给数组元素。例如:

scanf("%d", &arr[1]);

 (四)一维数组的内存存储

一维数组中的元素在内存中是按照元素的顺序连续存储的,每个元素占据的存储空间大小由数据类型决定。例如,对于 int 类型的数组,每个元素占据 4 个字节(在 32 位系统中)。数组名代表数组在内存中的首地址,即第一个元素的地址。

三、二维数组

(一)二维数组的定义

二维数组可以看作是一维数组的数组,即每个元素又是一个一维数组。在 C 语言中,定义二维数组的一般形式为:

数据类型 数组名[行长度][列长度];

其中,行长度表示二维数组的行数,列长度表示每行的列数,它们都必须是常量表达式。

例如,定义一个 3 行 4 列的整型二维数组:

int arr[3][4];

 (二)初始化二维数组的初始化

二维数组的初始化方式有以下几种:

1.按行初始化:将二维数组的每一行元素用花括号括起来,逐行进行初始化。

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

2.按顺序初始化:将所有元素按行优先的顺序放在一个花括号中进行初始化。

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

3.不完全初始化:只给部分元素赋初值,未赋值的元素会自动初始化为 0。

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

此时,数组第一行前两个元素为1,2,后两个元素为0;第二行前三个元素为2,3,4,第四个元素为0;第三行第一个元素为3,其余元素均为0。

4.省略行长度初始化:在初始化时可以省略行长度,但不能省略列长度,编译器会根据初始化列表中的元素个数和列长度自动确定行长度。

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

(三)访问二维数组元素

二维数组元素的访问需要使用两个下标,第一个下标表示行,第二个下标表示列,下标均从 0 开始。例如,对于上面定义的数组 arr,它的元素可以表示为 arr [i][j],其中 i 的取值范围是 0 到 2,j 的取值范围是 0 到 3。

(四)二维数组的内存存储

二维数组在内存中也是连续存储的,它按照行优先的顺序存储,即先存储第一行的所有元素,然后存储第二行的所有元素,以此类推。例如,对于 3 行 4 列的二维数组 arr,其元素在内存中的存储顺序为 arr [0][0]、arr [0][1]、arr [0][2]、arr [0][3]、arr [1][0]、arr [1][1]、arr [1][2]、arr [1][3]、arr [2][0]、arr [2][1]、arr [2][2]、arr [2][3]。

二维数组名代表数组在内存中的首地址,即第一行第一个元素的地址。arr [i] 表示第 i 行的首地址,arr [i] 就相当于一个一维数组名。

四、数组使用注意事项

1.数组下标不能越界,否则会导致未定义行为,可能会破坏内存中的其他数据,甚至导致程序崩溃。

2.数组名是一个常量指针,不能对其进行赋值操作。例如,arr = arr + 1; 是错误的。

3.在传递数组参数时,通常需要同时传递数组的长度,因为在函数参数中,数组会退化为指针,无法获取数组的长度。

 

http://www.xdnf.cn/news/186319.html

相关文章:

  • 「OC」源码学习——alloc与init的实现
  • 【博客系统】博客系统第二弹:实现博客列表接口(在 Service 层重新封装 Mapper 层返回结果,避免实体类所有字段都向前端返回)、SimpleDateFormat 类的使用方法
  • 强化学习中关键超参数的详细说明
  • 如何把握邮件发送的黄金时间?
  • TypeScript 入门到进阶全讲解(超全版)
  • DAY8-GDB调试及打桩
  • BOPF Business Object Development
  • AiCube 试用 - ADC 水位监测系统
  • NameSilo转入转出域名
  • 大模型笔记8 文本数据清洗
  • C语言数据结构—数组(cpu内存与指针)
  • CSS选择器
  • 6.图的OJ题(1-10,未完)
  • shell命令二
  • “八股训练营”学习总结
  • Linux学习——FTP(功能实现)
  • windows anaconda 配置 ipynb 环境
  • 《电商业务分析终极框架:从数据到决策的标准化路径》
  • OpenLayers WebGL与3D渲染 (进阶一)
  • 五分钟讲清数据需求怎么梳理!
  • 数据库关系模型的总结
  • 软件功能设计视角下的能源管理系统功能清单构建与实践
  • Redis高可用架构全解析:主从复制、哨兵模式与集群实战指南
  • 2025系统架构师---黑板架构风格
  • 风控策略引擎架构设计全解析:构建智能实时决策系统
  • 探索大语言模型(LLM):自监督学习——从数据内在规律中解锁AI的“自学”密码
  • MLLM之Bench:LEGO-Puzzles的简介、安装和使用方法、案例应用之详细攻略
  • OpenSSH 漏洞 CVE-2025-26465 和 CVE-2025-26466 可引发中间人攻击和 DoS 攻击
  • 毫米波振荡器设计知识笔记
  • BeautifulSoup的详细使用说明