数组

数组

  • 一维数组
  • 二维数组

数组的特点:

  • 放在一块连续的内存空间中
  • 数组中的每个元素都具有相同的数据类型

一维数组

一维数组的定义及初始化:

int arr[3] = {1, 2, 3};  // 定义了一个数组arr,包含1、2、3三个元素int arr[3];  // 定义了一个数组arr,还未初始化;若数组未进行初始化,则一定要给定数组长度
arr[0] = 1;  // 给数组的第一个元素赋值(初始化)
arr[1] = 2;  // 给数组的第二个元素赋值
arr[2] = 3;  // 给数组的第三个元素赋值int arr[] = {1, 2, 3};  // 定义了一个数组arr,包含1、2、3三个元素,编译器会自动计算数组元素个数;即若数组进行了初始化,可以不给定数组长度int arr[3] = {1};  // 定义了一个数组arr,第一个元素为1,其他元素默认为0int arr[3] = {};  // 定义了一个数组arr,所有元素默认为0int arr[3] = {1.89, 2, 3};  // 定义了一个数组arr,包含1、2、3三个元素;1.89会变成1;最新的一些版本支持此操作int arr[3] {1, 2, 3};  // 定义了一个数组arr,包含1、2、3三个元素;最新的一些版本可以这么使用arr[3] = {1, 2, 3};  // 错误,没有定义数组类型array = arr;  // 错误,静态数组不能赋值给另一个变量

在通常情况下,C++将数组名解释为数组第一个元素的地址:

#include <iostream>
using namespace std;int main(){int arr[3] = {1, 2, 3};cout << arr[0] << endl;cout << arr[1] << endl;cout << arr[2] << endl;cout << arr << endl;system("pause");return 0;
}
---------
1
2
3
00000084716FF7F8

一维数组名的作用:

  • 可以通过数组名统计整个数组占用的内存空间大小
  • 可以通过数组名查看数组的首地址
#include <iostream>
using namespace std;int main(){int arr[5] = {1, 2, 3, 4, 5};cout << "整个数组占用的内存空间大小为:" << sizeof(arr) << endl;  // 20cout << "单个元素占用的内存空间大小为:" << sizeof(arr[0]) << endl;  // 4cout << "数组的元素个数为:" << sizeof(arr) / sizeof(arr[0]) << endl;  // 5cout << "数组的首地址为:" << int(arr) << endl;  // 地址一般用十六进制数表示,可以使用int()将其转为十进制数cout << "数组中第一个元素的地址为:" << int(&arr[0]) << endl;  // 可以使用取地址符&来获取数据的地址cout << "数组中第二个元素的地址为:" << int(&arr[1]) << endl;cout << "数组中第三个元素的地址为:" << int(&arr[2]) << endl;system("pause");return 0;
}
---------
整个数组占用的内存空间大小为:20
单个元素占用的内存空间大小为:4
数组的元素个数为:5
数组的首地址为:419231544
数组中第一个元素的地址为:419231544
数组中第二个元素的地址为:419231548
数组中第三个元素的地址为:419231552

C++中,有两种强制转换类型的格式:

  • (type)value – 这种格式继承自C语言
  • type(value) – 这种是纯粹的C++格式,目的是让强制类型转换看起来像是函数调用一样,便于用户使用

数组名是常量,不能用来赋值。

一维数组案例,获取一维数组中的最大值:

#include <iostream>
using namespace std;int main() {int arr[] = { 200, 350, 300, 400, 100 };int max = 0;for (int i = 0; i < 5; i++) {if (arr[i] > max) {max = arr[i];}}cout << "最大值为:" << max << endl;system("pause");return 0;
}
---------
最大值为:400

一维数组案例,数组元素逆置:

#include <iostream>
using namespace std;int main() {int arr[] = { 1, 3, 2, 5, 4 };int start = 0;int end = sizeof(arr) / sizeof(arr[0]) - 1;int temp;while (start < end) {temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {cout << arr[i] << " ";}system("pause");return 0;
}
---------
4 5 2 3 1

一维数组案例,冒泡排序:

/*
冒泡排序是最常用的排序算法,对数组内元素进行排序,主要步骤如下:
1. 比较相邻的元素,如果第一个元素比第二个元素大,就交换它们
2. 对每一对相邻元素做同样的比较工作,一轮执行完毕后,最后一个就是最大值
3. 删掉最后的最大值,重复以上步骤,每次比较次数-1,直到不需要比较
*/#include <iostream>
using namespace std;int main() {int arr[] = { 4, 2, 8, 0, 5, 7, 1, 3, 9 };for (int i = 0; i < sizeof(arr) / sizeof(arr[0]) - 1; i++) {for (int j = 0; j < sizeof(arr) / sizeof(arr[0]) - 1 - i; j++) {if (arr[j] > arr[j+1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {cout << arr[i] << " ";}system("pause");return 0;
}
---------
0 1 2 3 4 5 7 8 9

二维数组

二维数组的定义和使用:

/*
数据类型 数组名[行数][列数] = {{ele1, ele2}, {ele3, ele4}};  // 最直观,可读性最好
数据类型 数组名[行数][列数] = {ele1, ele2, ele3, ele4};
数据类型 数组名[行数][] = {{ele1, ele2}, {ele3, ele4}};
数据类型 数组名[][列数] = {{ele1, ele2}, {ele3, ele4}};
*/#include <iostream>
using namespace std;int main(){int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};cout << arr[0][0] << endl;cout << arr[0][1] << endl;cout << arr[0][2] << endl;cout << arr[1][0] << endl;cout << arr[1][1] << endl;cout << arr[1][2] << endl;system("pause");return 0;
}
---------
1
2
3
4
5
6

二维数组名的作用:

  • 查看二维数组所占的内存空间大小
  • 获取二维数组的首地址
#include <iostream>
using namespace std;int main(){int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};cout << "整个二维数组占用的内存空间大小为:" << sizeof(arr) << endl;  // 24cout << "二维数组中一行占用的内存空间大小为:" << sizeof(arr[0]) << endl;  // 12cout << "二维数组中单个元素占用的内存空间大小为:" << sizeof(arr[0][0]) << endl;  // 4cout << "二维数组的行数为:" << sizeof(arr) / sizeof(arr[0]) << endl;  // 2cout << "二维数组的列数为:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;  // 3cout << "二维数组的元素个数为:" << sizeof(arr) / sizeof(arr[0][0]) << endl;  // 6cout << "二维数组的首地址为:" << int(arr) << endl;  // 获取数组的首地址cout << "二维数组中第一行的首地址为:" << int(arr[0]) << endl;  // 获取一行的首地址cout << "二维数组中第一个元素的地址为:" << int(&arr[0][0]) << endl;  // 使用取地址符&来获取数据的地址system("pause");return 0;
}
---------
整个二维数组占用的内存空间大小为:24
二维数组中一行占用的内存空间大小为:12
二维数组中单个元素占用的内存空间大小为:4
二维数组的行数为:2
二维数组的列数为:3
数组的元素个数为:6
二维数组的首地址为:1483732280
二维数组中第一行的首地址为:1483732280
二维数组中第一个元素的地址为:1483732280

二维数组的案例,输出各位同学的总成绩:

/*语文     数学     英语
张三     100     100     100
李四     90      50      100
王五     60      70      80
*/#include <iostream>int main(){int arr[3][3] = {{100, 100, 100},{90, 50, 100},{60, 70, 80}};int count = 0;for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){int total_score = 0;for(int j = 0; j < sizeof(arr[0]) / sizeof(arr[0][0]); j++){total_score += arr[i][j];}count++;if(count == 1){std::cout << "张三的总成绩为:" << total_score << std::endl;}if(count == 2){std::cout << "李四的总成绩为:" << total_score << std::endl;}if(count == 3){std::cout << "王五的总成绩为:" << total_score << std::endl;}}system("pause");return 0;
}
---------
张三的总成绩为:300
李四的总成绩为:240
王五的总成绩为:210

C风格字符串:

char cat[9] = {'m', 'i', 'n', ' ', 'a', 'p', 'p', 'l', 'e'};  // 这不是一个字符串
char cats[10] = {'m', 'i', 'n',' ', 'a', 'p', 'p', 'l', 'e', '\0'};  // 这是一个字符串

C风格字符串具有一种特殊的性质,以空字符结尾,即\0,其ASCII码为0,用来标记字符串的结尾。
为了简化以上数组初始化为字符串,可以用以下方法,用引号括起的字符串隐式地包括结尾的空字符:

char cats[10] = "min apple";  // \0被默认添加
char fish[] = "Bubbles";  // 编译器自动计数

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

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

相关文章

chatGPT-对话爱因斯坦

引言 阿尔伯特爱因斯坦&#xff08; 1879年 3 月 14 日 – 1955 年 4 月 18 日&#xff09;是一位出生于德国的理论物理学家&#xff0c;被广泛认为成为有史以来最伟大、最有影响力的科学家之一。他以发展相对论而闻名&#xff0c;他还对量子力学做出了重要贡献&#xff0c;因…

rfc7234之http缓存

缓存概念 缓存处理请求步骤 缓存如果查询到某个请求已经有缓存&#xff0c;那么需要进一步检查该资源的新鲜度&#xff0c;根据新鲜度和请求中的字段综合评估是否要去服务端拉取新鲜的资源。 注意&#xff1a; 创建响应时候要注意版本匹配&#xff0c;如果服务器响应和客户端…

漏洞指北-VulFocus靶场专栏-中级01

漏洞指北-VulFocus靶场专栏-中级01 中级001 &#x1f338;dcrcms 文件上传 &#xff08;CNVD-2020-27175)&#x1f338;step1&#xff1a;输入账号 密码burp suite 拦截 修改类型为 jpeg 中级002 &#x1f338;thinkphp3.2.x 代码执行&#x1f338;step1&#xff1a;burpsuite …

React配置代理(proxy)

使用axios进行请求&#xff0c;而配置代理过程。 第一种 在package.json中&#xff0c;添加proxy配置项,之后所有的请求都会指向该地址 但这种方法只能配置一次&#xff0c;也只有一个 示例&#xff1a; "proxy":"https://localhost:5000" 添加后&am…

【ARM】Day6 cotex-A7核UART总线实验

cotex-A7核UART总线实验 1. 键盘输入一个字符‘a’&#xff0c;串口工具显示‘b’ 2. 键盘输入一个字符串"nihao"&#xff0c;串口工具显示“nihao” uart.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_rcc.h" #include "stm3…

React源码解析18(9)------ 实现多节点渲染【修改beginWork和completeWork】

摘要 目前&#xff0c;我们已经实现了单节点的&#xff0c;beginWork&#xff0c;completeWork&#xff0c;diff流程。但是对于多节点的情况&#xff0c;比如: <div><span></span><span></span> </div>这种情况&#xff0c;我们还没有处…

el-table实现纯前端查询列表(不走后端接口)

2023.8.16今天我学习了如何使用前端进行数据的查询&#xff0c;有时候后端会直接返回全部的数据&#xff0c;这时候我们就需要用前端进行查找数据。 首先elementUI有自带el-table查询的组件&#xff1a; Element - The worlds most popular Vue UI framework 我们发现在这段代…

Linux网络编程:网络基础

文章目录&#xff1a; 一&#xff1a;协议 二&#xff1a;网络应用设计模式_BS模式和CS模式 三&#xff1a;网络分层模型&#xff08;OSI七层 TCP/IP四层&#xff09; 四&#xff1a;通信过程 五&#xff1a;协议格式 1.数据包封装 2.以太网帧格式和ARP数据报格式 …

【Linux】Centos安装 mariadb 并授权远程登陆

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

【云原生】Docker基本原理及镜像管理

目录 一、Docker概述 1.1 IT架构的演进&#xff1a; 1.2 Docker初始 1.3 容器的特点 1.4 Docker容器与虚拟机的区别 1.5 容器在内核中支持2种重要技术 1.6 Docker核心概念 1&#xff09;镜像 2&#xff09;容器 3&#xff09;仓库 二、安装Docker 2.1 Yum安装Docker…

三.net core 自动化发布到docker (创建一个dotnet工程发布)

创建Jenkins-create a job 输入名称&#xff08;建议不要带“”这类的字符&#xff09;&#xff0c;选择自由风格的类型&#xff08;红框标注的&#xff09;&#xff0c;点击确定 用于测试,下面选项基本没有选择-配置代码地址 选择执行shell #!/bin/bash # 获取短版本号 GITHA…

NLPR、SenseTime 和 NTU 加速自动视频纵向编辑

视频人像编辑技术已经在电视、视频和电影制作中得到了应用&#xff0c;并有望在不断发展的网真场景中发挥关键作用。最先进的方法已经可以逼真地将同源音频合成为视频。现在&#xff0c;来自北京模式识别国家实验室&#xff08;NLPR&#xff09;、商汤科技研究和南洋理工大学的…

OpenAI Function calling

开篇 原文出处 最近 OpenAI 在 6 月 13 号发布了新 feature&#xff0c;主要针对模型进行了优化&#xff0c;提供了 function calling 的功能&#xff0c;该 feature 对于很多集成 OpenAI 的应用来说绝对是一个“神器”。 Prompt 的演进 如果初看 OpenAI 官网对function ca…

CloudQuery实战 | 谁说没有一款一体化数据库操作管控云平台了?

文章目录 CloudQuery询盾的地址CloudQuery主页统一入口数据库归纳SQL编辑器权限管控审计中心数据保护数据变更 CloudQuery文档中心了解CloudQuery快速入门安装步骤社区版v2.1.0操作手册1数据查询更新日志 CloudQuery社区和活动 CloudQuery线上实战线上实战主页面展示及数据操作…

广义模态控制

广义模态控制 1. 模态及模态控制的思想2. 控制方法数学推导3. 解的几个条件4. 举例计算 温馨提示&#xff1a;在阅读本文之前&#xff0c;读者最好具有一定的模态的相关知识&#xff0c;可以阅读笔者的另一篇博客模态反馈控制中的第1节来了解。 1. 模态及模态控制的思想 我们…

宝塔部署Java+Vue前后端分离项目经验总结

前言 之前部署服务器都是在Linux环境下自己一点一点安装软件&#xff0c;听说用宝塔傻瓜式部署更快&#xff0c;这次浅浅尝试了一把。 确实简单&#xff01; 1、 买服务器 咋买服务器略&#xff0c;记得服务器装系统就装 Cent OS 7系列即可&#xff0c;我装的7.6。 2、创建…

Linux面试笔试题(1)

1、以长格式列目录时&#xff0c;若文件test的权限描述为&#xff1a;drwxrw-r–&#xff0c;则文件test的类型及文件主的权限是__A____。 A.目录文件、读写执行 B.目录文件、读写 C.普通文件、读写 D.普通文件、读 在这个问题中&#xff0c;我们需要解析文件权限的描述&…

ChatGPT在智能城市规划和交通优化中的应用如何?

智能城市规划和交通优化是应对城市化挑战、提高城市可持续性的重要领域。在这方面&#xff0c;ChatGPT作为一种强大的自然语言处理模型&#xff0c;可以发挥重要作用&#xff0c;帮助实现更智能、高效的城市规划和交通管理。本文将详细探讨ChatGPT在智能城市规划和交通优化中的…

Python typing函式庫和torch.types

Python typing函式庫和torch.types 前言typingSequence vs IterableCallableUnionOptionalFunctionsCallableIterator/generator位置參數 &#xff06; 關鍵字參數 Classesself自定義類別ClassVar\_\_setattr\_\_ 與 \__getattr\_\_ torch.typesbuiltins 參數前的&#xff0a; …

[RDMA] 高性能异步的消息传递和RPC :Accelio

1. Introduce Accelio是一个高性能异步的可靠消息传递和RPC库&#xff0c;能优化硬件加速。 RDMA和TCP / IP传输被实现&#xff0c;并且其他的传输也能被实现&#xff0c;如共享存储器可以利用这个高效和方便的API的优点。Accelio 是 Mellanox 公司的RDMA中间件&#xff0c;用…