C语言 * 数组的解析 *

news2025/7/12 20:44:18

目录

一:一维数组的创建和初始化

1.1 数组的创建

1.2 数组的初始化

1.3 一维数组的使用

1.4 一维数组在内存中的存储

二:二维数组的创建和初始化

2.1 数组的创建

2.2 数组的初始化

2.3 一维数组的使用

2.4 一维数组在内存中的存储

2.5 数组越界

三:数组作为函数参数

3.1 冒泡排序函数的错误设计

3.2 数组名是什么?

3.3 冒泡排序函数的正确设计

四:数据实例 

5.1 数组实现实例:三子棋

5.2 数组实现实例:扫雷游戏

5.3 下期博客期待~


·        在 C 语言中,除了整型、实型和字符型等基本数据类型之外,还可以将基本数据类型按照一定的规则组合起来构成较为复杂的数据类型,称为构造数据类型,又称导出数据类型,主要包括数组、结构体、共用体等。数组中顺序存放了一批相同数据类型的数据,这些数据不仅数据类型相同,而且在计算机内存里连续存放,地址编号最低的存储单元存放数组的起始元素,地址编号最高的存储单元存放数组的最后一个元素。通过数组名标识和序号(C 语言称为下标)可以引用这些数组元素。

                                                                                    

一:一维数组的创建和初始化

1.1 数组的创建

type_t   arr_name   [const_n];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小

注:数组创建,在C99标准之前, [] 中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念

1.2 数组的初始化

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。
比如:

数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初始化的内容来确定。

但是对于下面的代码要区分,内存中如何分配

1.3 一维数组的使用

对于数组的使用我们之前介绍了一个操作符: [] ,下标引用操作符。它其实就数组访问的操作符。

代码如下:

 总结:
1. 数组是使用下标来访问的,下标是从0开始。
2. 数组的大小可以通过计算得到。

1.4 一维数组在内存中的存储

接下来我们探讨数组在内存中的存储。

 仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增。
由此可以得出结论:数组在内存中是连续存放的。

二:二维数组的创建和初始化

2.1 数组的创建

2.2 数组的初始化

注意:二维数组如果有初始化,行可以省略,列不能省略

2.3 二维数组的使用

二维数组的使用也是通过下标的方式

2.4 二维数组在内存中的存储

像一维数组一样,这里我们尝试打印二维数组的每个元素。

 通过结果我们可以分析到,其实二维数组在内存中也是连续存储的。

2.5 数组越界

        数组的下标是有范围限制的。
        数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1,所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
        C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,所以程序员写代码时,最好自己做越界的检查

注意:二维数组也是存在越界行为的 

三:数组作为函数参数

3.1 冒泡排序函数的错误设计

往往我们在写代码的时候,会将数组作为参数传个函数,比如:我要实现一个冒泡排序(这里要讲算法思想)

函数:将一个整形数组排序(冒泡排序)

冒泡排序的思想:两个相邻的元素进行比较

方法1,出问题,那我们找一下问题。

调试之后可以看到 bubble_sort 函数内部的 sz ,是1。难道数组作为函数参数的时候,不是把整个数组的传递过去?

for循环方式一:

while循环方式二

3.2 数组名是什么?

探讨一下数组名是什么:
先看代码:(一维数组的数组名是什么?)

 总结:数组名是数组首元素的地址。(有两个例外)

1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。2. 2.&数组名,取出的是数组的地址。&数组名,数组名表示整个数组。
        除此1,2两种情况之外,所有的数组名都表示数组首元素的地址。

先看代码:(一维数组的数组名是什么?)

5.3 下期博客期待~

  

                                                                                

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

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

相关文章

黑苹果系统安装常见问题汇集

常见问题 黑苹果折腾之路上遇到的问题多种多样,这里把常见问题分为安装篇、使用篇、进阶篇。 安装篇 如何安装黑苹果? 目前主要有两种方式,第一种是推荐的方式:下载黑苹果安装镜像 → 刻录到U盘 → 调整配置文件 → 格式化准备…

又一款机器学习模型解释神器:LIME

在机器学习的许多应用中,要求用户信任模型来帮助他们做出决策。医生肯定不会仅仅因为“模型这么说”就给病人做手术。即使在风险较低的情况下,例如从 Netflix 选择要观看的电影时,在我们根据模型放弃几个小时的时间之前,也需要一定…

红黑树封装 map/set 及其迭代器(C++)

目录 一、map/set 的封装 1.1 封装思路 1.2 红黑树节点调整 1.3 map 和 set 的定义 1.4 仿函数 KeyOfValue 1.5 map/set 的插入 二、map/set 迭代器实现 2.1 迭代器的定义 2.2 解引用运算符重载 2.3 成员访问运算符重载 2.4 (不)等于运算符重载 2.5 begin() 与 end…

[附源码]java毕业设计智慧农业销售平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

认知电子战 | 电子战简介

1 电子战的基本概念 电子战(Electronic Warfare,EW)也叫做电子对抗(Electronic Counter Measures,ECM) 简洁定义: 电子战是为确保我方使用电磁频谱,同时阻止敌方使用电磁频谱所采取的战术与技术 完善定义: 利用电磁能、定向能、水声能等的技术手段,确定、扰乱、削弱…

Linux kprobe原理

文章目录前言一、Kprobes and Return Probes二、How Does a Kprobe Work三、Changing Execution Path四、Return Probes4.1 How Does a Return Probe Work4.2 Kretprobe entry-handler五、How Does Jump Optimization Work5.1 Init a Kprobe5.2 Safety Check5.3 Preparing Deto…

Ubuntu配置全局系统代理(常用工具配置)

Ubuntu配置全局系统代理(常用工具)问题描述解决方法配置系统代理终端部分配置配置apt代理配置curl,wget,pip代理git相关代理的设置配置docker代理问题描述 公司电脑网络规则做了限制,主机没办法通外网,只能通过代理连接外网。主机…

普惠联接,让人类诗意地栖居在大地上

弗里德里希荷尔德林为世间留下了一句精彩绝伦的诗句:“人生在世,成绩斐然,却还依然诗意地栖居在大地上。”“人,诗意地栖居”,这一命题启发了此后众多思想家、社会学家的缪斯。人之为人,应该如何成为存在的…

Web APIs——BOM

下面从以下7个方面介绍BOM: BOM概述window对象的常见事件定时器JS执行机制location对象navigator对象history对象 1. 什么是BOM? BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交…

谷歌FLAN-T5作者亲讲:5400亿参数,1800个任务,如何实现大语言模型“自我改进”...

2021年,谷歌的研究者们提出了FLAN大模型,其基于Instruction Tuning的方式,极大地提升了大语言模型的理解能力。同时,各种Prompting方法的涌现预示着针对大模型的下游微调将成为研究领域关注的重点。近日,谷歌研究者们再…

电影主题HTM5网页设计作业成品——爱影评在线电影(10页面)使用dreamweaver制作采用DIV+CSS进行布局

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

企业知识库有什么价值?

图为简道云企业知识库让雇员对知识管理深感激动的最差课堂教学 简道云知识库:http://s.fanruan.com/rgdrd 我们可以借助创建知识程序库应用领域知识管理方法论,来同时实现重新分配知识。 最终目标是让每一人都有参与 KM 的积极主动性, 以期…

DOAW咖啡品牌是如何生意增长的?

上海人爱喝咖啡,早已不是什么秘密,上海是中国咖啡市场的战略要地,以行业而论,咖啡赛道有星巴克、瑞幸等大品牌,同时也有不少新品牌不断冲击线下线上渠道,使这个行业内卷加速。 DOAW虽然成立时间短&#xff…

【深度学习】yolov5 tag7.0 实例分割 从0到1的体会,从模型训练,到量化完成

这里记录下yolov5 tag7.0的实例分割,因为也用过paddle家族的实例分割,能够训练出来,但是开放restiful api时遇到点小问题,还是yolov爽啊!!通过这篇博文,您可以一步步的搭建自己的分割网络。 文章…

python+SQL sever+thinter学生宿舍管理系统

pythonSQL severthinter学生宿舍管理系统一、系统介绍二、功能展示1.主页2.用户登陆3.学生信息三、数据库四、其它1.其他系统实现一、系统介绍 系统主要功能学生信息管理、管理员信息管理、核酸信息管理等。 二、功能展示 1.主页 2.用户登陆 3.学生信息 三、数据库 /*Navic…

汉罗塔汉洛塔c++,看不懂ni打我

汉罗塔汉洛塔c,看不懂ni打我 大哥大姐手下留情 别打我!!! [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GC9f81Hm-1669391569678)(C:\Users\ASUS\Desktop\汉罗塔 . Input第一行为一个正整数nOutput若干行&#…

vue3新一代状态管理器 — pinia的学习与使用

目录一、vuex与pinia特性二、使用pinia2.1 安装pinia2.2 项目引入2.3 创建store2.4 使用storegetteraction2.5 修改state1、直接修改2、使用$patch3、使用actions2.6 storeToRefs一、vuex与pinia Pinia 最初是为了探索 Vuex 的下一次迭代会是什么样子,结合了 Vuex 5…

4. 云计算中的存储基础知识

4.1 物理磁盘类型和存储设备类型 虚拟化中的存储架构 物理磁盘类型 - SATA盘 SATA的全称Serial Advanced Technology Attachment,SATA(Serial ATA)口的硬盘又叫串口硬盘。SATA采用串行连接方式,串行ATA总线使用嵌入式时钟信号&a…

kubernetes组件 Controller manager深刻认知

kubernetes组件 Controller manager深刻认知Controller manager常见的controllerController manager的工作流程informer的内部机制控制器的协同工作原理ReplicaSet controller 是如何被管理的?statefuleset 和deployment controller是如何控制滚动升级的statefulese…

学习基于html和JavaScript的滑动图片拼图验证源码

之前的文章《使用C#中的GDI功能实现图片填充验证方式》中介绍过使用GDI在Winform中实现图片拼图验证的思路,学了html中的canvas使用方式后,也可以照搬思路实现,只不过没有在Winform中方便。但是在网上看了不少基于html和JavaScript的滑动图片…