【C++ 三】一维数组、二维数组

news2025/2/27 11:21:18

数组概述、一维数组、二维数组


文章目录

  • 数组概述、一维数组、二维数组
  • 前言
    • 1 数组
      • 1.1 概述
    • 2 一维数组
      • 2.1 一维数组定义方式
      • 2.2 一维数组数组名
      • 2.3 冒泡排序
    • 3 二维数组
      • 3.1 二维数组定义方式
      • 3.2 二维数组数组名
  • 总结


前言

本文包含数组概述、一维数组、二维数组。


1 数组

1.1 概述

所谓数组,就是一个集合,里面存放了相同类型的数据元素

特点1: 数组中的每个 数据元素都是相同的数据类型

特点2: 数组是由 连续的内存 位置组成的

在这里插入图片描述

2 一维数组

在这里插入图片描述

2.1 一维数组定义方式

一维数组定义的三种方式:

(1)、数据类型 数组名[ 数组长度 ];

(2)、数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};

(3)、数据类型 数组名[ ] = { 值1,值2 ...};

#include <iostream>  // 包含标准输入输出流文件
using namespace std;  // 使用标准命名空间

int main() {

	// 1、数据类型 数组名[元素个数];
	int score[10];

	// 利用下标赋值
	score[0] = 100;
	score[1] = 99;
	score[2] = 85;

	// 利用下标输出
	cout << score[0] << endl;  // 100
	cout << score[1] << endl;  // 99
	cout << score[2] << endl;  // 85

	cout << endl;

	// 2、数据类型 数组名[元素个数] = {值1,值2 ,值3 ...};
	// 如果{}内不足10个数据,剩余数据用0补全
	int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };

	// 逐个输出
	//cout << score2[0] << endl;
	//cout << score2[1] << endl;

	// 一个一个输出太麻烦,因此可以利用循环进行输出
	for (int i = 0; i < 10; i++)
	{
		cout << score2[i] << endl;
	}

	cout << endl;

	// 3、数据类型 数组名[] = {值1,值2 ,值3 ...};
	int score3[] = { 100,90,80,70,60,50,40,30,20,10 };

	for (int i = 0; i < 10; i++)
	{
		cout << score3[i] << endl;
	}

	system("pause");  // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果

	return 0;  // 程序正常退出
}

在这里插入图片描述

2.2 一维数组数组名

一维数组名称的用途

(1)、可以统计整个数组在内存中的长度

(2)、可以获取数组在内存中的首地址

在这里插入图片描述

#include <iostream>  // 包含标准输入输出流文件
using namespace std;  // 使用标准命名空间

int main() {

	// 数组名用途
	// 1、可以获取整个数组占用内存空间大小
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

	cout << "整个数组所占内存空间为: " << sizeof(arr) << endl;  // 40
	cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl;  // 4
	cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;  // 10

	cout << endl;

	// 2、可以通过数组名获取到数组首地址
	cout << "数组首地址为: " << arr << endl;  // 004FFA68 ; 十六进制
	cout << "数组首地址为: " << (int)arr << endl;  // 17431292
	cout << "数组中第一个元素地址为: " << (int)&arr[0] << endl;  // 17431292 ; &:取址符,查看元素的首地址
	cout << "数组中第二个元素地址为: " << (int)&arr[1] << endl;  // 17431296 ; 差四个字节

	//arr = 100;  // 错误,数组名是常量,因此不可以赋值

	system("pause");  // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果

	return 0;  // 程序正常退出
}

在这里插入图片描述

2.3 冒泡排序

作用: 最常用的排序算法,对数组内元素进行排序

(1)、比较相邻的元素。如果第一个比第二个大,就交换他们两个

(2)、对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值

(3)、重复以上的步骤,每次比较次数-1,直到不需要比较

在这里插入图片描述

在这里插入图片描述

// 将数组 { 4,2,8,0,5,7,1,3,9 } 进行升序排序

#include <iostream>  // 包含标准输入输出流文件
using namespace std;  // 使用标准命名空间

int main() {

	int arr[9] = { 4,2,8,0,5,7,1,3,9 };

	for (int i = 0; i < 9 - 1; i++)  // 总共排序轮数:元素个数 - 1
	{
		for (int j = 0; j < 9 - 1 - i; j++)  // 对比次数:元素个数 - 当前轮数 - 1
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];  // 交换
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}

	for (int i = 0; i < 9; i++)
	{
		cout << arr[i] << " ";
	}

	cout << endl;

	system("pause");  // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果

	return 0;  // 程序正常退出
}

在这里插入图片描述

3 二维数组

二维数组就是在一维数组上,多加一个维度

在这里插入图片描述

3.1 二维数组定义方式

二维数组定义的四种方式:

(1)、数据类型 数组名[ 行数 ][ 列数 ];

(2)、数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };

(3)、数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};

(4)、 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};

建议:以上4种定义方式,利用 第二种更加直观,提高代码的可读性

#include <iostream>  // 包含标准输入输出流文件
using namespace std;  // 使用标准命名空间

// 打印二维数组函数
void Fun_Array(int arr[2][3]) {
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
}

int main() {
 
	// 1、数组类型 数组名 [行数][列数]
	int arr[2][3];
	arr[0][0] = 1;
	arr[0][1] = 2;
	arr[0][2] = 3;
	arr[1][0] = 4;
	arr[1][1] = 5;
	arr[1][2] = 6;

	Fun_Array(arr);  // 打印二维数组
 
	// 2、数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };
	int arr1[2][3] =
	{
		{1,2,3},
		{4,5,6}
	};

	Fun_Array(arr1);

	// 3、数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4  };
	int arr2[2][3] = { 1,2,3,4,5,6 };

	Fun_Array(arr2);

	// 4、数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4  };
	int arr3[][3] = { 1,2,3,4,5,6 };

	Fun_Array(arr3);

	system("pause");  // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果

	return 0;  // 程序正常退出
}

在这里插入图片描述

3.2 二维数组数组名

(1)、查看二维数组所占内存空间

(2)、获取二维数组首地址

#include <iostream>  // 包含标准输入输出流文件
using namespace std;  // 使用标准命名空间

int main() {
 
	//二维数组数组名
	int arr[2][3] =
	{
		{1,2,3},
		{4,5,6}
	};

	cout << "二维数组大小: " << sizeof(arr) << endl;  // 24
	cout << "二维数组一行大小: " << sizeof(arr[0]) << endl;  // 12
	cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl;  //4

	cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;  // 2
	cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;  //3

	//地址
	cout << "二维数组首地址:" << arr << endl;  // 24FA48
	cout << "二维数组第一行地址:" << arr[0] << endl;  // 24FA48
	cout << "二维数组第二行地址:" << arr[1] << endl;  // 24FA54

	cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;  // 24FA48
	cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;  // 24FA4C

	system("pause");  // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果

	return 0;  // 程序正常退出
}

在这里插入图片描述

经典案例:考试成绩统计


总结

(1)、数组名的命名规范与变量名命名规范一致,不要和变量重名;

(2)、数组中下标是从0开始索引;

(3)、数组名是常量,不可以赋值;

(4)、直接打印数组名,可以查看数组所占内存的首地址;

(5)、对数组名进行 sizeof,可以获取整个数组占内存空间的大小;

(6)、在定义二维数组时,如果初始化了数据,可以省略行数;

(7)、二维数组名就是这个数组的首地址;

(8)、对二维数组名进行 sizeof 时,可以获取整个二维数组占用的内存空间大小。

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

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

相关文章

python web 医院加密处方系统

医院加密处方系统 环境要求&#xff1a; 1、python3.8 2、vue 3、django 4、mysql 5、ruoyi快速开发框架 登录界面 可以登录和注册&#xff0c;注册分三个角色&#xff0c;主治医师和药品医师还有配制医师&#xff0c;有验证码和用户权限功能&#xff0c;用户管理、部…

AIGC下一站:期待、警惕充斥着AI剪辑师的世界

上月底&#xff0c;名为“chaindrop”的 Reddit 用户&#xff0c;在 r/StableDiffusion subreddit 上分享了一个由人工智能生成的视频&#xff0c;在业内引起了不小的争议。 视频中&#xff0c;一个由 AI 生成的丑陋畸形的 “威尔史密斯”&#xff0c;以一种可怕的热情将一把意…

vba:消息框基础,massagebox

常量常量值说明vbOKOnly0只显示“确定”按钮&#xff08;缺省值&#xff09;VbOKCancel1显示“确定”和“取消”按钮VbAbortRetryIgnore2显示“终止”、“重试”和“忽略” 按钮VbYesNoCancel3显示“是”、“否”和“取消”按钮VbYesNo4显示“是”和“否”按钮VbRetryCancel5显…

pkg-config

前言 在介绍 pkg-config 之前&#xff0c;先讲一个我的经历。 有一次我想用 libgtk 库在 ubuntu 上实现一个简单的图形界面&#xff0c;就像下面代码 #include <gtk/gtk.h>int main(int argc, char *argv[]) {GtkWidget *window;gtk_init(&argc, &argv);window…

UG NX二次开发(C#)-建模-获取曲面的法矢

文章目录 1、前言2、曲面的法矢示例3、获取曲面的法矢3.1 采用 uFModl.AskFaceProps实现3.2采用 uFSo实现4、结论1、前言 在UG NX二次开发过程中,我们想获取曲面的法矢,是通过ufun函数来获取的。我们以一个平面和一个曲面来说明其开发过程。 2、曲面的法矢示例 创建一张曲…

商城系统开发方案分析

互联网的不断发展&#xff0c;电商行业已经成为了当前最重要的商业形式之一。商城系统的开发也因此而备受关注。商城系统的开发是针对B2C、B2B2C等多种商业模式&#xff0c;如用户熟知的SHOP、商派等一系列商城系统&#xff0c;将商品和服务进行在线销售的一个综合性平台。那么…

【软考备战·希赛网每日一练】2023年4月17日

文章目录一、今日成绩二、错题总结第一题第二题第三题第四题三、知识查缺题目及解析来源&#xff1a;2023年04月17日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 第二题 解析&#xff1a; 第三题 解析&#xff1a; SCAN调度算法 也叫 “电梯”算…

RocketMQ 发送批量消息、过滤消息和事务消息

前面我们知道RocketMQ 发送延时消息与顺序消息&#xff0c;现在我们看下怎么发送批量消息、过滤消息和事务消息。 发送批量消息 限制是这些批量消息应该有相同的 topic&#xff0c;相同的 waitStoreMsgOK&#xff0c;而且不能是延时消息。 此外&#xff0c;这一批消息的总大小…

如何合理选择ClickHouse表主键

ClickHouse提供索引和数据存储的复杂机制&#xff0c;能够实现在高负载下仍有优异的读写性能。当创建MergeTree表时需要选择主键&#xff0c;主键影响大多数查询性能。本文介绍主键的工作原理&#xff0c;让我们知道如何选择合适的主键。 设置主键 MergeTree表可以设置主键&am…

香橙派5使用RK3588S内置NPU加速yolov5推理,实时识别数字达到50fps

前言&#xff1a; 香橙派5采用了RK3588S&#xff0c;内置的NPU达到了6Tops的算力&#xff0c;博主这里记录一下自己的踩坑过程&#xff0c;好不容易做出来的不能以后忘记了&#xff08;手动狗头&#xff09;。这里博主还在B站上发布了效果视频&#xff0c;大家感兴趣的话可以看…

TensorFlow 和 Keras 应用开发入门:1~4 全

原文&#xff1a;Beginning Application Development with TensorFlow and Keras 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形…

Java 中的 非并发容器

1.四大类容器 java中容器主要有四大类&#xff0c;如下图所示 2.非并发容器 1) List 类 List 类 不支持并发的有 ArrayList 与 LinkedList ArrayList 底层实现 ArrayList 底层为 数组&#xff0c;由于数组的特性&#xff0c;非常适合用于 查询多&#xff0c;增删改的业务…

【数据结构学习1】数据结构

目录数据结构定义数据结构的构成逻辑结构逻辑结构的类型存储结构数据运算数据类型和抽象数据类型算法定义分析基础时间复杂度分析事前分析估算法 -> 分析算法的执行时间时间复杂度时间复杂度类型简化的算法时间复杂度分析空间复杂度分析数据结构 定义 数据&#xff1a;所有…

工作流调度系统 Azkaban介绍与安装(一)

文章目录前言1、为什么要用工作流调度系统2、常见的工作流调度系统1 集群规划2 配置 MySQL3 配置 Executor Server3.1 修改 azkaban.properties3.2 启动3.3 激活4 配置 Web Server4.1 修改 azkaban.properties4.2 修改azkaban-users.xml文件&#xff0c;添加 atguigu 用户4.3 启…

VM 虚拟机没有网络,无法Ping通

场景&#xff1a; 虚拟机用过&#xff0c;之前一切正常&#xff0c;使用NAT模式联网&#xff0c;配置了静态IP换了路由器&#xff0c;推测是主机IP网段变了无法使用ssh工具连接虚拟机&#xff0c;且相互都ping不通&#xff08;后来经历了主机可以ping通虚拟机&#xff0c;虚拟…

PWM寄存器初始化

本模块主要实现输出频率占空比可调的 PWM 波形功能和输入捕获功能&#xff0c;同时也可作为计数器使用。一、主要特性 1. 16位向上或向下计数器&#xff1b; 2. 支持最多6路PWM通道&#xff1b; 3. 每个通道支持输出比较或边缘对齐PWM模式波形输出&#xff0c;支持设置、清除、…

关于 CSDN-AI 机器人 programmer_ada —— 阿达·洛夫莱斯(Ada Lovelace)

收到早期文章的一条新评论&#xff1a; 文笔和内容稍稍透漏着机器人的风格&#xff0c;打开主页果不其然 看到个人介绍中的巴贝奇的分析机&#xff0c;突然觉得头像很是眼熟。 最近刚读了《人工智能简史》&#xff0c;第4章——从汇编语言到TensorFlow&#xff0c;人工智能的…

使用layui组件库制作进度条

使用layui组件库制作进度条 html代码 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Example</title><!-- 引入 layui 的 CSS 文件 --><link rel"stylesheet" href"https://cdn.staticfil…

Day948.组件化成熟度评估,你的目的地在哪里呢 -系统重构实战

组件化成熟度评估&#xff0c;你的目的地在哪里呢 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于组件化成熟度评估&#xff0c;你的目的地在哪里呢的内容。 一、组件化成熟度模型 组件化成熟度模型可以帮助咱全局去思考当前的现状&#xff0c;并制定更有针对性的…

ChatGPT带火的百万年薪职业究竟是什么?

对话有ChatGPT、画图有Midjourney&#xff0c;哪怕被封号了&#xff0c;国内的文心一言、通义千问也不遑多让。 ChatGPT等生成式AI工具涌现程度堪比“乱花渐欲迷人眼”。 拟一份演讲稿&#xff0c;画一张海报&#xff0c;做一份PPT大纲&#xff0c;生成个图表&#xff0c;敲一…