数组(C语言版)

news2024/10/7 7:24:52

 

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。

🥰内容专栏:这里是《C知识系统分享》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,希望可以帮到读者们哦。

🥴内容分享:本期会对C语言中的重点知识数组进行具体讲解,各位看官姥爷快搬好小板凳坐好叭。

😘:不要998,只要一件三连,三连买不了吃亏,买不了上当(写作不易,求求了💓)。


目录

👻前言

🤖1. 一维数组的创建和初始化

😤1.1 数组的创建

😠1.2 数组的初始化

🤑1.3 一维数组的使用

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

😕2. 二维数组的创建和初始化

🥵2.1 二维数组的创建

 🥸2.2 二维数组的初始化

😵‍💫2.3 二维数组的使用

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

🤤3. 数组越界

🥶4. 数组作为函数参数

🤢4.1 函数实现冒泡排序的错误设计

 😷4.2 数组名是什么

🥴4.3 冒泡排序的正确设计

🤠总结


👻前言

在前两期文章中,我们已经对函数进行了具体的概括。这期文章我们将要对C语言中的数组动手了!数组可是数据结构里面的重要组成,学好了数组对后期的数据结构也会有很大的帮助的。上篇文章刚用数组实现了一个三子棋游戏http://t.csdn.cn/qJabR,是不是感觉还挺有趣的。好啦,废话不多说,开始正文叭!

🤖1. 一维数组的创建和初始化

😤1.1 数组的创建

数组它是一组相同元素的集合。数组的创建方式:

数组创建的实例: 

大家思考一个问题:代码二中引用变量的数组能创建成功吗?答案是在有的情况下是可以的。数组创建,在C99标准之前[]中要给一个常量才行。在C99标准中支持了变长数组的概念,数组的大小可以由使用变量指定,但是它不能初始化。 

😠1.2 数组的初始化

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

🤑1.3 一维数组的使用

在这里,我们要注意一个操作符[ ], 下标引用操作符。它是数组访问的操作符。

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

int arr[10];

int sz = sizeof(arr) / sizeof(arr[0]);

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

话不多说,我们直接用代码来演示:

我们仔细观察输出的结果,可以发现,元素的地址是在不断的加4。所以它们是有规律的递增。   我们可以得出结论: 数组在内存中是连续存放的。

😕2. 二维数组的创建和初始化

🥵2.1 二维数组的创建

 🥸2.2 二维数组的初始化

注意:二维数组初始化 它的行可以省略,但列不能省略。

😵‍💫2.3 二维数组的使用

二维数组的使用也是通过下标来访问的:

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

为了直观的观察,我们还是直接上代码通过输出的地址来理解:

通过观察它们的地址可以发现二维数组在内存中也是连续存放的。 

🤤3. 数组越界

数组的下标是有范围限制的。

数组的下标规定是从0开始的,如果有n个元素,最后一个元素的下标为n-1。

数组的下标如果小于0或大于n-1,就是数组越界访问了,超出了数组合法空间的访问。

C语言本身是不做数组下标的越界检查的,编译器也不一定报错。所以就需要程序员自己检查 

🥶4. 数组作为函数参数

在写代码的时候,我们时不时就会将数组作为函数的参数。在这里我们以冒泡排序为例(就不具体将冒泡排序了,之前专门写了一篇冒泡排序的文章http://t.csdn.cn/bUeGf) 

🤢4.1 函数实现冒泡排序的错误设计

下面这个代码,通过输出,我们发现没有达到我们要的效果。我们可以通过调试观察,我们发现,sz求出的是1,代表只有一个元素,说明arr数组作为函数参数的时候,没有把整个数组传进去,只是把首元素地址传进去了

 😷4.2 数组名是什么

通过输出的结果我们可以发现:数组名就是数组首元素地址。(但是又两个例外)

如果说数组名是首元素地址,那么:

int arr[10] = { 0 };
printf("%d\n", sizeof(arr));

 为什么它输出的结果是40?

1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。

2. &数组名,取出来的是数组的地址。&地址数组名,数组表示整个数组

除此之外,所有的数组名就是表示数组首元素的地址。

🥴4.3 冒泡排序的正确设计

解决方法:将数组的个数在主函数中求出来,作为参数传到函数里面


🤠总结

到这里,我们对于数组的内容就已经全部归纳完毕了。要注意的重点就是一维数组和二维数组的创建和初始化,数组的传参。将这些内容搞清楚,数组这一章内容就算是登堂入室了。 下期内容我们将会对操作符动刀子了!大家可以留意留意。最后大家别忘了一键三连哦!

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

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

相关文章

3 ES快速入门

3 ES快速入门 ES作为一个索引及搜索服务,对外提供丰富的REST接口,快速入门部分的实例使用head插件来测试,目的是对ES 的使用方法及流程有个初步的认识。 3.1 创建索引库 ES的索引库是一个逻辑概念,它包括了分词列表及文档列表…

电力系统负荷与电价预测优化模型(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【C++】vector的模拟实现及深度剖析

目录 一、模拟实现二、使用memcpy拷贝问题三、动态二维数组理解 一、模拟实现 namespace hxj {template<class T>class vector{public:// Vector的迭代器是一个原生指针typedef T* iterator;typedef const T* const_iterator;//构造和销毁vector():_start(nullptr), _fi…

Spring更简单的存储和读取Bean对象

目录 1.第一个Spring项目 2.存储Bean对象 2.1 准备工作 2.2 五大类注解 2.3 方法注解Bean 2.4 Bean对象的默认命名规则 3. 读取Bean对象 3.1 属性注入 3.2 setter注入 3.3 构造方法注入 3.4 注入异常问题 3.5 注入方式优缺点 3.6 Autowired和Resource的区别 1.第一…

python web开发(二):HTML标签语言

文章目录 简介标签语法标题div和span超链接插入图片列表表格Input系列提交表单 参考 简介 如下展示了一段简单的HTML模板&#xff0c; <head></head>标签中主要包含一些基本配置&#xff0c;如编码方式&#xff0c;标题等&#xff0c;注意标题的作用如下图所示 …

【java BUG收集-持续更~】

JAVA BUG JAVA BUGliquibase.lockservice锁异常1、启动参数增加jvm参数 -Dliquibase.lockservicefalse2、修改或清空 包含有 DATABASECHANGELOGLOCK的表 JAVA BUG 该章收集工作中遇到的java bug,作为工作日志&#xff0c;方便回顾。 liquibase.lockservice锁异常 报错信息&a…

Spring Boot实用技巧之单元测试

文章目录 一、单元测试的概念二、单元测试的优势三、Spring Boot实现单元测试&#xff08;一&#xff09;添加依赖&#xff08;二&#xff09;生成单元测试的类&#xff08;三&#xff09; 添加注解和业务代码1. 添加 SpringBootTest 注解2. 添加单元测试的业务代码3. 执行测试…

MySQL部分常用函数总结

数值计算函数 使用方法&#xff1a; ABS&#xff08;x&#xff09; date函数 获取date中对应部分&#xff1a; YEAR(date) 字符串函数 用法举例&#xff1a; 左侧截取字符 SELECT LEFT(‘MySQL’,2); 按符号拆分字符&#xff0c;返回拆分后的部分 SUBSTRING_INDEX(profile,“…

创新洞察 |与众不同的DTC模式:2023年发展趋势将如何影响零售业增长策略?

DTC零售不再局限于数字原生品牌。传统零售商也在采用相同的策略&#xff0c;特别是在后疫情世界中竞争时。预计DTC销售将继续增长&#xff0c;因为更多品牌转向电子商务领域&#xff0c;而已建立的DTC参与者也在扩大其现有市场。预计仅在美国&#xff0c;数字原生品牌将在2023年…

多分类的ROC曲线绘制思路

目录 一、什么是ROC曲线 二、AUC面积 三、代码示例 1、二分类问题 2、多分类问题 一、什么是ROC曲线 我们通常说的ROC曲线的中文全称叫做接收者操作特征曲线&#xff08;receiver operating characteristic curve&#xff09;&#xff0c;也被称为感受性曲线。 该曲线有两…

第四节 Linux 特殊权限SUID、SGID、SBIT

目录 1.Set UID 简称 SUID 2.Set GID 简称 SGID 3.Sticky Bit 简称 SBIT 1.Set UID 简称 SUID 简称 SUID 限制与功能&#xff1a; SUID权限仅对二进制程序有效&#xff1b; 执行者对于该程序需要具有x的执行权限&#xff1b; 本权限仅在执行该程序的过程中有效&#xff1…

Softmax简介

Softmax是一种数学函数&#xff0c;通常用于将一组任意实数转换为表示概率分布的实数。其本质上是一种归一化函数&#xff0c;可以将一组任意的实数值转化为在[0, 1]之间的概率值&#xff0c;因为softmax将它们转换为0到1之间的值&#xff0c;所以它们可以被解释为概率。如果其…

VSCode +gdb+gdbserver远程调试arm开发板

一、下载编译器 从ARM官网下载gcc-arm编译器&#xff0c;编译器中自带gdb和gdbserver&#xff0c;可以省去自己编译。 注&#xff1a;gdb是电脑端程序&#xff0c;gdbserver是arm开发板程序 arm官网链接&#xff1a;https://developer.arm.com/downloads/-/arm-gnu-toolchain-d…

速卖通、Lazada、美客多、亚马逊新品流量如何利用测评快速提升?

熟悉亚马逊的卖家应该清楚&#xff0c;亚马逊对于新发布的产品会有一定的流量倾向&#xff0c;特别是产品刚上架的2-4周&#xff0c;你的产品将在搜索结果中显示更多&#xff0c;排名比通常情况下更快。 第一步&#xff1a;优化好自己的产品listing1.新品上架标题要点标题权重…

SLM27524一款能够有效驱动MOSFET和IGBT电源开关双通道低侧栅极驱动器

深力科电子为“数据中心服务器电源”推荐一款双通道大非反相低侧栅极驱动器 SLM27524&#xff0c;该产品能够有效驱动MOSFET和IGBT电源开关。SLM27524采用一种能够从内部极大地降低击穿电流的设计&#xff0c;将高峰值的源电流和灌电流脉冲提供给电容负载&#xff0c;从而实现了…

NDK OpenGL离屏渲染与工程代码整合

NDK​系列之OpenGL离屏渲染与工程代码整合&#xff0c;本节主要是对上一节OpenGL渲染画面效果代码进行封装设计&#xff0c;将各种特效代码进行分离解耦&#xff0c;便于后期增加其他特效。 实现效果&#xff1a; 实现逻辑&#xff1a; 1.封装BaseFilter过滤器基类&#xff0c…

C++ 多线程编程(四) 原子类型atomic

C 11增加了原子类型atomic类&#xff0c;在一定条件下可以实现无锁编程。 1. 简介 atomic是一个模板类&#xff0c;定义如下&#xff1a; template< class T > struct atomic; atomic可以实现无锁编程&#xff0c;在效率上要比mutex高很多&#xff0c;直接看个直观的…

有道云笔记常用快捷键

F5 同步/刷新 Shift AltD 插入当前时间&#xff1a; CTRL B 加粗 CTRL I 斜体字 CTRL U 下划线 CTRL E 删除线 CTRL D 任务框 CTRL 1 变成标题1 CTRL 2 变成标题2 CTRL 3 变成标题3 CTRL 4 变成标题4 CTRL G 高亮块 CTRL H 加水平线 当前行成无序列表&a…

npm安装依赖实践总结

node下载地址&#xff1a;https://nodejs.org/en/download/releases 。可以看到node版本、npm版本、node_module版本。 【1】npm的全局安装路径 查看默认值&#xff1a; npm get prefix默认是C:\Users\你的用户名\AppData\Roaming\npm 可以通过 npm config prefix 更改全局…

为什么PCB设计完成后需要放置mark点

PCB设计中的Mark点是指一些标记点&#xff0c;通常用于促进PCB制造和组装过程中的准确性和一致性。这些标记点在制造过程中可以帮助操作员进行自动化定位&#xff0c;从而确保所有部件都被正确组装到其正确位置&#xff0c;这对于确保产品的质量和可靠性至关重要。 下面&#…