当前位置: 首页 > news >正文

根本魔法语言数组 (一) (C语言)


用有趣的言语来阐述苦涩难懂的代码世界,让每一个技术都充满风趣!
个人主页:散峰而望
学习方向:C/C++等方向
专栏系列:

  • 《C语言:从基础到进阶》
  • 《编程工具的下载和使用》
  • 《C语言刷题》

人生格言:冀以尘雾之微,补益山海,荧烛末光,增辉岁月。

博主简介
在这里插入图片描述

文章目录

  • 前言
  • 1. 数组的概念
  • 2.一维数组的创建和初始化
    • 2.1 数组的创建
    • 2.2 数组的初始化
    • 2.3 数组的类型
  • 3. 一维数组的使用
    • 3.1 数组下标
    • 3.2 数组元素的打印
    • 3.3 数组的输入
  • 4.一维数组在内存中的存储
  • 5.sizeof计算数组元素个数


前言

如果说变量是散落的魔法卷轴,那么数组就是精心打造的卷轴陈列架,让知识有序归位,让力量整齐排列。在这里,你不再是那个手忙脚乱、四处寻找单个卷轴的学徒,而是能统御成百上千魔法元素的列阵法师。管理一支魔法军团,只需要编号和阵列来组织他们,这正是数组的精髓。

准备好了吗?让我们一同打开这扇通往有序世界的大门,学习如何用数组这把钥匙,开启高效编程的魔法宝库!

1. 数组的概念

数组相当于一个魔法卷轴架 – 一个专门存放同类魔法卷轴的固定架子,即一组相同类型元素的集合

从中我们可以发现两个有价值信息:

数组一般分为一维数组和多维数组,多维数组一般比较常见的是二维数组。

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

2.1 数组的创建

一维数组相当于单排卷轴架,其创建的基本语法如下:

 type arr_name[常量值]|            |
数组元素类型   数组名
常量值-数组元素的个数

放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小数组的元素类型。

  • type指定的是数组中存放数据的类型,可以是:char、short、int、float等,也可以自己定义的类型。
  • arr_name指的是数组的名字,这个名字看情况起名,有意义就行。

比如:我们想存储某个公司近20天的人员情况,我们可以创建一个数组,如下:

 int personal[20];

当然我们也可以根据需要创建其他类型和大小的数组:

char ch[6];
double score[8];

2.2 数组的初始化

有时候,数组创建的时候需要给定一些初始值,这种就被称为初始化

那数组如何初始化呢?数组的初始化一般使用大括号,将数据放在打括号里面。数组如果进行了(完全)初始化,可以不指定数组的大小,是可以省略的。因为数组的大小是根据初始化的内容来推断

完全初始化:
int arr1[5] = {1,2,3,4,5};
不完全初始化:
int arr2[4] = {1};
错误的初始化-初始化项多余
int arr3[3] = {1,2,3,4};

2.3 数组的类型

数组也是有类型的,数组算是一种自定义类型,去掉数组名留下的就是数组比喻的类型。

如下:

int arr1[10];
int arr[12];
char ch[5];

arr1数组的类型是int [10]
arr2 数组的类型是int [12]
ch 数组的类型是char [5]

3. 一维数组的使用

学习了一维数组的基本语法,一维数组可以存放数据,存放数据的目的是对数据的操作,那我们如何使用一维数组呢?

3.1 数组下标

C语言规定数组是有下标的,下标是从0开始。如果数组有n个元素,最后一个元素的下标是n-1,下标就相当于数组元素的编号,如下:

int arr[10] = {1,2,3,4,5,6,7,8,9,10};

在这里插入图片描述

在C语言中数组的访问提供了一个操作符**[]**,这个操作符叫:下标引用操作符

有了下标操作符,我们就可以轻松的访问到数组的元素,我们就可以轻松的访问数组元素了。比如我们访问下标为6时的元素,我们就使用arr[6],想要访问下标为2的元素,就可以使用arr[2],代码如下:

int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", arr[3]);
printf("%d\n", arr[8]);
return 0;
}

在这里插入图片描述

3.2 数组元素的打印

如果想要访问整个数组的内容,那该怎么办呢?

只要我们产生所有元素下标就行,那我们就用for循环产生0∽9的下标,接下来就可以进行访问了。

代码如下:

int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}

输出结果:

在这里插入图片描述

3.3 数组的输入

当我们明白了数组的访问,我们也就要根据需求,自己给数组输入想要的数据,如下:

int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}

在这里插入图片描述

4.一维数组在内存中的存储

经过前面知识的保障,接下来我们使用数组基本上没有什么障碍了。如果想要深入了解数组,我们要进一步了解数组在内存中存储地址。

依次打印数组元素的地址:

int main()
{
int i = 0;
int arr[10] = { 0 };
for (i = 0; i < 10; i++)
{
printf("&arr[%d] = %p\n", i, &arr[i]);
}
return 0;
}

输出结果如下:

在这里插入图片描述

从数组的输出结果分析,数组随着下标的增长,地址由小到大变化,并且发现每两个相邻的元素之间相差4(因为一个整形是4个字节)。故可以得出:数组在内存中是连续存放的

5.sizeof计算数组元素个数

如果想要知道数组的个数,有没有方法计算数组元素个数吗?

可以用魔法度量仪sizeof

sizeof是C语言中的关键字,是可以计算类型或者变量大小的,故sizeof也可以计算数组的大小。

比如:

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

在这里插入图片描述

这里输出的结果是40,计算的是数组所占内存空间的总大小,单位是字节

我们又知道数组的所有元素的类型都是相同的,那只要计算出一个元素所占字节的个数,数组的个数就能算出来。例如:

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

在这里插入图片描述

可以计算出一个元素的长度为4。

接下来就能计算出数组的元素个数:

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

在这里插入图片描述

可以看到结果是:10,表示有10个元素。

因此以后代码中需要数组元素个数的地方就不用固定写死了,使用上面的计算,无论数组怎么变化,计算出的大小也就跟着变化。

http://www.jsqmd.com/news/53220/

相关文章:

  • 《程序员修炼之道:从小工到专家》阅读笔记5
  • Spring Cloud工程中使用Nacos配置中心的2种方式
  • 人工智能之数据分析 Matplotlib:第三章 基本属性
  • 那为什么go 就能用同步的写法,而且不用协程的情况下,实现异步编程,而且还不阻塞os线程
  • URL地址转base64
  • 2025年租房去哪里找房源:独家榜单与深度解析
  • C# 图片加载引发的内存溢出异常
  • 实用指南:LV.5 文件IO
  • CSS视图过渡入门指南:让多页面应用拥有丝滑动画
  • 《ROS1学习笔记8——自定义服务素材》
  • 实用指南:逻辑回归(Logistic Regression)
  • CTIP 与 3D-IC 堆栈热行为仿真实践
  • Mac 安装 4K Video Downloader v5.0.0.5303-1.dmg 方法(附安装包)
  • 浮点数定点表示(Q格式)
  • TPS的另外一层含义:绝对并发用户数 - BKY007
  • P10547 [THUPC 2024 决赛] 排列游戏
  • NeurlPS 2025!多伦多大学TIRE助力3D/4D 生成精准保留主体身份
  • 笔记——OI中求逆元的几种方式(不含数学知识的讲解)
  • 2025国内公关公司排名推荐(整合权威数据源):十大机构深度对比,专业分析与选择指南
  • SpringBoot集成LangChain4j快速开发AI应用(调用阿里云Api) - 实践
  • 中美大数据产业的十年分岔路 - 智慧园区
  • acme证书申请
  • 【论文精读】DreamVideo:定制化主体与动作的视频生成技能
  • NOIP模拟赛11.27
  • Open WebUI大模型输出完成后新对话响应延迟、输出变慢问题
  • 2025年11月掘进机位移传感器,拦焦车位移传感器,推焦车位移传感器厂家最新推荐,焦化设备适配测评
  • 2025年11月辊缝位移传感器,切纸位移传感器,水坝闸门液压位移传感器厂家最新推荐,水利与造纸适配测评
  • 2025年11月起重机位移传感器,挖掘机位移传感器,压路机位移传感器厂家最新推荐,工程机械性能测评
  • Java大厂面试真题:Spring Boot微服务+Kafka消息队列+AIGC场景实战问答全解析 - 指南
  • 从被动审查到主动风控:文档抽取技术驱动合同管理范式转移