【玩转C语言】第五讲--->数组-->一维和多维深度理解
🔥博客主页🔥:【 坊钰_CSDN博客 】
欢迎各位点赞👍评论✍收藏⭐
引言:
大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识,另外,还会不定时更新【C语言训练题库】,想学好C语言的宝子们,一定要收藏起来,一起努力吧!
点赞!收藏!以防以后找不到了!!!
目录
1. 数组的概念
2. ⼀维数组的创建和初始化
2.1 数组创建
2.2 数组的初始化
2.3 数组的类型
3. 一维数组
3.1 数组下标
3.2 数组打印
3.3 数组的输入
4. 一维数组在内存中的存储
5. sizeof计算元素个数
6. 二维数组
6.1 二维数组的创建
7. 二维数组的初始化
7.1 不完全初始化
7.2 完全初始化
7.3 按行初始化
7.4 可省略行,不可省略列
8. 二维数组的使用
8.1 二维数组的下标
8.2 二维数组的输入和输出
9. 二维数组在内存中的存储
10. 小结
1. 数组的概念
数组是⼀组相同类型元素的集合,有两点要记住
- 数组中存放的是1个或者多个数据,但是数组元素个数不能为0
- 数组中存放的多个数据,类型是相同的
数组分为⼀维数组和多维数组
2. ⼀维数组的创建和初始化
2.1 数组创建
type arr_name[m]
- type:为数组的数据类型
- arr_name:为数组名
- m:为数组大小
例:
一个班有20个学生
int Student[20]2.2 数组的初始化
在创建的同时给予相应的元素,例:
//完全初始化int arr[10] = {1,2,3,4,5,6,7,8,9,10};//不完全初始化int arr[10] = {1};   //第一个元素为1,后面全为02.3 数组的类型
数组跟数据一样,有整型,字符型,浮点型
例:
int arr[10]  //整型数组char arr[10]  //字符型数组double arr[10]  //浮点型数组3. 一维数组
平常使用的都为一维数组,如:
int arr[10]char arr[10]...3.1 数组下标
我们看一张图

数组的下标从 0 开始的,一个数组有 n 个元素,那最后一个元素的下标为 n-1
例:
#include <stdio.h>int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("%d\n", arr[5]);return 0;
}结果:

3.2 数组打印
那么我们该如何打印一个数组的元素呢?
一个数组有多个元素,我们需要使用到循环(for循环)
例:
#include <stdio.h>int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i < 10; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}结果:

3.3 数组的输入
明白数组的打印,我们也可以按我们的需要来输入元素
例:
#include <stdio.h>int main()
{int arr[10] = { 0 };for (int i = 0; i < 10; i++){scanf("%d ", &arr[i]);}for (int i = 0; i < 10; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}结果:

4. 一维数组在内存中的存储
数组中元素,随着下标的增大,地址随之增大,那数组中元素是如何存放的呢?
我们打印数组元素的地址:
#include <stdio.h>int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i < 10; i++){printf("&arr[%d] = %p \n",i, &arr[i]);}return 0;
} 
从输出的结果我们分析,数组随着下标的增长,地址是由小到大变化的,并且我们发现每两个相邻的 元素之间相差4(因为⼀个整型是4个字节)
得出结论:数组在内存中是连续存放的

5. sizeof计算元素个数
当我们想要快速知道数组元素个数时,就可以利用sizeof 操作符
例:
#include <stdio.h>int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int count = sizeof(arr) / sizeof(arr[0]);printf("%d ", count);return 0;
}关键:
int count = sizeof(arr) / sizeof(arr[0]);用整个数组大小除以一个元素的大小就可以得到数组的元素个数
6. 二维数组
了解了一维数组,我们来了解二维数组
6.1 二维数组的创建
int arr[3][4];char arr[5][4];
- 3表示数组有3行
- 4表示每⼀行有4个元素
- int 表示数组的每个元素是整型类型
- arr 是数组名,可以根据自己的需要指定名
7. 二维数组的初始化
7.1 不完全初始化
int arr1[3][5] = {1,2};
int arr2[3][5] = {0}; 
7.2 完全初始化
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7}; 
7.3 按行初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}}; 
7.4 可省略行,不可省略列
int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}}; 
8. 二维数组的使用
8.1 二维数组的下标
建立一个二维数组
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7}
例:
int main()
{int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };printf("%d ", arr[2][4]);return 0;
}结果:

8.2 二维数组的输入和输出
知道如何建立二维数组,那我们来了解二维数组的输入和输出
例:
#include <stdio.h>int main()
{int arr[3][5] = {0};for (int i = 0; i < 3; i++)   //产生行号{for (int j = 0; j < 5; j++)  //产生列号{scanf("%d ", &arr[i][j]);  //输入}}for (int i = 0; i < 3; i++)    //产生行号{for (int j = 0; j < 5; j++)   //产生列号{printf("%d ", arr[i][j]);   //输出}printf("\n");}return 0;
}结果:

9. 二维数组在内存中的存储
知道了一维数组在内存中的存储,让我们来了解一下二维数组的
例:
#include <stdio.h>int main()
{int arr[3][5] = { 1,1,1,1,1,2,2,2,2,2,3,3,3,3,3 };for (int i = 0; i < 3; i++){for (int j = 0; j < 5; j++){printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);}}return 0;
}
从输出的结果来看,每⼀行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元 素(如:arr[0][4]和arr[1][0])之间也是差4个字节
得出结论:⼆维数组中的每个元素都是连续存放的
10. 小结
以上就是关于【玩转C语言】第五讲的内容了,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持!
相关文章:
 
【玩转C语言】第五讲--->数组-->一维和多维深度理解
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 引言: 大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识…...
 
Apache Flink 任务提交模式
Flink 任务提交模式 Flink可以基于多种模式部署:基于Standalone 部署模式,基于Yarn部署模式,基于Kubernetes部署模式以上不同集群部署模式下提交Flink任务会涉及申请资源,各角色交互过程,不同模式申请资源涉及到的角色…...
 
Ubuntu22.04安装OMNeT++
一、官网地址及安装指南 官网地址:OMNeT Discrete Event Simulator 官网安装指南(V6.0.3):https://doc.omnetpp.org/omnetpp/InstallGuide.pdf 官网下载地址:OMNeT Downloads 旧版本下载地址:OMNeT Old…...
Matlab课程设计——手指静脉识别项目
手指静脉识别项目 项目方案设计介绍 本项目实现手指图像的处理和匹配算法,需要处理的数据是本人不同手指的图像,首先经过图像处理,使得指静脉的纹理增强凸显处理,然后将所有的这些图像进行相互间的匹配,检验类内和类…...
centos软件安装
安装方式 一、二进制安装 --解压即用,只针对特殊平台 --jdk tomcat 二、RPM:按照一定规范安装软件,无法安装依赖的文件 --mysql 三、yum:远程安装基于RPM,把依赖的文件安装上去,需要联网 四、源码安装 jdk安…...
力扣 217. 存在重复元素,389. 找不同,705. 设计哈希集合,3. 无重复字符的最长子串,139. 单词拆分
217. 存在重复元素 题目 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 AC代码 class Solution { public:bool containsDuplicate(vector<int>& nums) {// …...
嵌入式软件工作能力
1. 工作能力 技术能力强,并不代表工作能力 2. 流程把控 3. 项目管理 4. “找茬”能力 5. 文档输出能力...
 
景区导航导览系统:基于AR技术+VR技术的功能效益全面解析
在数字化时代背景下,游客对旅游体验的期望不断提升。游客们更倾向于使用手机作为旅行的贴身助手,不仅因为它能提供实时、精准的导航服务,更在于其融合AR(增强现实)、VR(虚拟现实)等前沿技术&…...
 
Mybatis-Plus代码生成器配置方法
Mybatis-Plus网址:https://baomidou.com/pages/779a6e/#%E4%BD%BF%E7%94%A8 第一步:引入依赖 <!-- 代码生成器 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId>…...
 
三主机部署HP Anyware Manager服务
一、序言 在部署拓扑和方案方面,HP Anyware Manager 非常灵活,可以部署在单个主机中,也可以部署在多个主机中,具体取决于组织的网络环境和运营要求。 二、单主机部署 2.1 描述 此部署配置是当 Anyware Manager 和 MongoDB 以及…...
 
Grafana :利用Explore方式实现多条件查询
背景 日志统一推送到Grafana上管理。所以,有了在Grafana上进行日志搜索的需求,而进行日志搜索通常需要多条件组合。 解决方案 通过Grafana的Explore的方式实现多条件查询。 直接看操作步骤: 在主页搜索框中输入“Explore” 进入这个界面…...
 
腾讯技术创作特训营 -- SUPERWINNIE -- AI重塑社交内容
目录 1 什么是AI社交内容 2 案例拆解 3 用LLM做爆文选题 4 用LLM出爆文脚本提示词 1 什么是AI社交内容 任何一个因素被AI取代都是AI社交内容 2 案例拆解 数字人 资讯素材 录屏产品的素材(小红书测试AI产品) 脚本 素材 剪辑 3 用LLM做爆文选题 &…...
 
AV1技术学习: Compound Prediction
一、双向 Compound Prediction AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为 其中,权重m(x, y) is scaled by 64 以进行整数计算,R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测…...
watch监听vue2与vue3的写法
watch的属性值 handler:回调函数, 即监听到变化时应该执行的函数,可以是单独的函数或带有 immediate 和 deep 属性的对象watch: {someProperty: function(newVal, oldVal) {// 处理逻辑}}deep: 其值是true或false, 当属性值是对象或数组时,深度观察会监…...
 
docker搭建普罗米修斯监控gpu
ip8的服务器监控ip110和ip111的服务器 被监控的服务器110和111只需要安装node-export和nvidia-container-toolkit 下载镜像包 docker pull prom/node-exporter docker pull prom/prometheus docker pull grafana/grafana新建目录 mkdir /opt/prometheus cd /opt/prometheus/…...
 
像 MvvmLight 一样使用 CommunityToolkit.Mvvm 工具包
文章目录 简介一、安装工具包二、实现步骤1.按照MvvmLight 的结构创建对应文件夹和文件2.编辑 ViewModelLocator3.引用全局资源二、使用详情1.属性2.命令3. 消息通知4. 完整程序代码展示运行结果简介 CommunityToolkit.Mvvm 包(又名 MVVM 工具包,以前称为 Microsoft.Toolkit…...
python入门课程Pro(2)--循环
循环 第1课 for循环的基本操作1.循环2.遍历3.for 循环遍历字典(1) 遍历字典的键(2)遍历字典的值(3)遍历字典的键和值 4.练习题(1)班级成绩单(2)最出名的城市(3)修改成绩(…...
今日总结:雪花算法,拉取在线用户
雪花算法: public class SnowflakeIdGenerator {private final long epoch 1626804000000L; // 定义起始时间戳,这里设置为2021-07-21 00:00:00 UTCprivate final long workerIdBits 5L; // 机器ID所占的位数private final long sequenceBits 10L; /…...
 
前瞻断言与后瞻断言:JavaScript 正则表达式的秘密武器
JavaScript 中的前瞻断言(lookahead)和后瞻断言(lookbehind)相信用过的小伙伴就知道它的威力了,在一些特定的需求场景下,可以做到四两拨千斤的作用,今天让我们来盘点一下在 JavaScript 正则表达…...
 
昇思MindSpore学习总结十六 —— 基于MindSpore的GPT2文本摘要
1、mindnlp 版本要求 !pip install tokenizers0.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple # 该案例在 mindnlp 0.3.1 版本完成适配,如果发现案例跑不通,可以指定mindnlp版本,执行!pip install mindnlp0.3.1 !pip install mindnlp …...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
 
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
 
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
 
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
 
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
 
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
 
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

