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

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


文章目录

  • 数组概述、一维数组、二维数组
  • 前言
    • 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 时,可以获取整个二维数组占用的内存空间大小。

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

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

相关文章

Jina AI 创始人肖涵博士:揭秘 Auto-GPT 喧嚣背后的残酷真相

Auto-GPT 究竟是一个开创性的项目&#xff0c;还是一个被过度炒作的 AI 实验&#xff1f;本文为我们揭开了喧嚣背后的真相&#xff0c;并揭示了 Auto-GPT 不适合实际应用的生产局限性。 背景介绍 这两天&#xff0c;Auto-GPT&#xff0c;一款让最强语言模型 GPT-4 能够自主完成…

口令暴力破解--Ftp协议暴力破解与Ssh协议暴力破解

Ftp协议暴力破解 FTP服务检测 FTP服务 FTP是一种文件传输协议&#xff0c; FTP服务默认端口为21。利用FTP服务器可以在本地主机和远程主机间进行文件传输。当FTP没有配置好安全控制&#xff0c;如对登录的源地址及密码尝试次数做限制&#xff0c;那么就会存在暴力破解可能。…

计算机网络

文章目录数据传输过程及接收过程应用层传输层TCP/IP4层网络模型 1.应用层 2.传输层 3.网络层 4.数据链路层 数据传输过程及接收过程 用户A在聊天软件上输入hello world按下发送,发送给B 一: 传输 1.应用层:构建一个应用层的数据报文交给传输层 ** 2.传输层: 根据刚才传过来的…

java虚拟机反射机制

&#xff08;1&#xff09;Java虚拟机反射机制的定义&#xff1f; Java反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功…

MySQL事务隔离级别

一、概念说明 脏读&#xff1a;指的是读到了其他事务未提交的数据&#xff0c;未提交意味着这些数据可能会回滚&#xff0c;也就是可能最终不会存到数据库中&#xff0c;也就是不存在的数据。读到了并不一定最终存在的数据&#xff0c;这就是脏读。 可重复读&#xff1a;在一个…

【GPT4】微软 GPT-4 测试报告(3)GPT4 的编程能力

欢迎关注【youcans的GPT学习笔记】原创作品&#xff0c;火热更新中 微软 GPT-4 测试报告&#xff08;1&#xff09;总体介绍 微软 GPT-4 测试报告&#xff08;2&#xff09;多模态与跨学科能力 微软 GPT-4 测试报告&#xff08;3&#xff09;GPT4 的编程能力 【GPT4】微软 GPT-…

ChatGPT和GPT-4带你选笔记本电脑

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

(只需三步)如何用chatgpt自动生成思维导图

目录 chatgpt是可以生成思维导图的&#xff01;只需三步&#xff0c;非常简单&#xff01; 第一步&#xff1a;打开chatgpt&#xff0c;告诉它主题 第二步&#xff0c;完善思维导图 第三步&#xff1a;查看思维导图的效果 chatgpt是可以生成思维导图的&#xff01;只需三步&am…

vue2路由(下)

编程式路由导航 通过点击按钮实现push和replace俩种模式的跳转 实现&#xff1a;就是通过$router原型里面的方法 也能实现路由的跳转和后退&#xff0c;分别采用的是$router里面的black和forward方法 感觉就是BOM对象中的history对象里面的方法 正是前进&#xff0c;后是后…

C/C++|物联网开发入门+项目实战|嵌入式C语言高级|C语言常用关键字及运算符操作-学习笔记(8)

文章目录2-2: C语言常用关键字及运算符操作关键字参考&#xff1a; 麦子学院-嵌入式C语言高级2-2: C语言常用关键字及运算符操作 [重点] 掌握C语言的常用关键宇及其应用场景&#xff0c;使用技巧 关键字 编译器&#xff1a;预先定义了一定意义的字符串&#xff0c;32个。 s…

通讯录的实现(初级版本)

思维导图&#xff1a; 目录 思维导图&#xff1a; ​编辑 一&#xff0c;实现通讯录的第一步——实现逻辑 二&#xff0c;头文件内实现的内容 三&#xff0c;contect.c文件内的函数定义 3.1初始化通讯录:void InitContect(cotect*pc) 3.2:实现通讯录内容的增加&#xff…

Python的基础

这是我自己学习Python的三个星期的小总结&#xff0c;内容包含了规范、数据类型、函数、类和捕捉异常&#xff0c;做了一个简单的梳理&#xff0c;希望可以帮助到和我一样开始学习Python的小伙伴&#xff0c;也希望多多支持&#xff0c;相互进步&#xff0c;下面步入正题。 基…

【Python】Python中的列表,元组,字典

文章目录列表创建列表获取元素修改元素添加元素查找元素删除元素列表拼接遍历列表切片操作元组创建元组元组中的操作字典创建字典添加/修改元素删除元素查找字典的遍历合法的key类型列表 列表是一种批量保存数据的方式&#xff0c;列表使用[]表示 创建列表 创建两个空列表 …

Java对日开发成趋势?网友:找工作打开了新思路

近两年行业环境起起伏伏&#xff0c;企业降本增效&#xff0c;提高人才招聘的门槛&#xff0c;导致大家找工作时觉得越来越难&#xff0c;尤其是Java开发&#xff0c;主打的就是一个“卷”&#xff01; 不过行业变革&#xff0c;挑战与机遇并存。Java作为编程语言排行榜的常年第…

malloc hook进行内存泄漏检测

记录下使用malloc的hook形式&#xff0c;写个小的demo&#xff0c;并记录遇到的问题 1. 实现代码&#xff1a; CMakeLists.txt和相应的memory_leak.cpp文件 cmake_minimum_required(VERSION 3.14) project(demo)set(_SRCmemory_leak.cpp)add_library(memory_leak SHARED ${_S…

SpringCloud:ElasticSearch之索引库操作

ElasticSearch索引库就类似数据库表&#xff0c;mapping映射就类似表的结构。 我们要向ElasticSearch中存储数据&#xff0c;必须先创建“库”和“表”。 1.mapping映射属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a;…

【无人机】采用最基本的自由空间路损模型并且不考虑小尺度衰落(多径多普勒)固定翼无人机轨迹规划(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Android Audio】TimeCheck机制

TimeCheck机制&#xff08;Android R/S&#xff09; TimeCheck.cpp TimeCheck.h frameworks/av/media/utils/TimeCheck.cpp TimeCheck守护线程的作用&#xff1a; 当audioserver中IAudioFlinger&#xff0c;IAudioPolicyService&#xff0c;IEffect中的每一个binder函数调用时…

E4--光纤接口通信测试应用2023-04-17

1.场景 使用两块开发板A和B&#xff0c;通过光纤接口将在A板上ROM中存储的图片数据转发到B板并显示在B板连接的显示屏上&#xff0c;实现光纤接口通信。 具体场景是&#xff0c;由于A735T片上资源有限&#xff0c;因此ROM IP存储了一张1024*600&#xff08;LVDS屏幕&#xff0…

深拷贝与浅拷贝

目录&#xff1a; 深拷贝与浅拷贝的区别实现深拷贝的方式利用JSON.parse(JSON.stringify())实现深拷贝的局限性cloneDeep与json的对比手写实现cloneDeep 深拷贝与浅拷贝的区别 深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。 深拷贝和浅拷贝的示意图大致如下&a…