C语言第八弹---一维数组

news2025/1/16 18:54:27

ede81be8a7064f028d68217619b3ff3c.jpeg

✨个人主页: 熬夜学编程的小林

💗系列专栏: 【C语言详解】 【数据结构详解】

一维数组

1、数组的概念

2、⼀维数组的创建和初始化

2.1、数组创建

2.2、数组的初始化

2.3、数组的类型

3、⼀维数组的使用

3.1、数组下标

3.2、数组元素的打印

3.3、数组的输入

4、⼀维数组在内存中的存储

5、sizeof计算数组元素个数

总结


1、数组的概念

数组是⼀组相同类型元素的集合;

从这个概念中我们就可以发现2个有价值的信息:
• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
• 数组中存放的多个数据,类型是相同的。


数组分为⼀维数组和多维数组,多维数组⼀般比较多见的是⼆维数组。


2、⼀维数组的创建和初始化


2.1、数组创建


⼀维数组创建的基本语法如下:

type arr_name[常量值];
 |      |        | 
 |      |        |
类型名  数组名  数组大小

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


• type 指定的是数组中存放数据的类型,可以是: char、short、int、float 等,也可以自定义的类型
• arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就型。
• [] 中的常量值是用来指定数组的大小的,这个数组的大小是根据实际的需求指定就行。

比如:我们现在想存储某个班级的20人的数学成绩,那我们就可以创建⼀个数组,如下:

int math[20];


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

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


2.2、数组的初始化

有时候,数组在创建的时候,我们需要给定⼀些初始值值,这种就称为初始化的。


那数组如何初始化呢?数组的初始化⼀般使用大括号,将数据放在大括号中。
 

//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};


2.3、数组的类型

数组也是有类型的,数组算是⼀种⾃定义类型,去掉数组名留下的就是数组的类型。

指针章节会详细讲解数组类型。
如下:
 

int arr1[10];
int arr2[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语言中数组的访问提供了⼀个操作符 [] ,这个操作符叫:下标引⽤操作符。


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

#include <stdio.h>
int main()
{
 int arr[10] = {1,2,3,4,5,6,7,8,9,10}; 
 printf("%d\n", arr[7]);//8
 printf("%d\n", arr[3]);//4
 return 0;
}


输出结果:

9c8a346809c442a58ea4da594bfb2881.png

3.2、数组元素的打印


接下来,如果想要访问整个数组的内容,那怎么办呢?
只要我们产生数组所有元素的下标就可以了,那我们使用for循环产生0~9的下标,接下来使用下标访问就行了。
如下代码:

#include <stdio.h>
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;
}


输出的结果:

314377ffd07b4026b080fcd296239746.png

3.3、数组的输入


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

#include <stdio.h>
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;
}


输入输出结果:

265b88e445cc4f0b91b177dc40ba37e0.png

此处为一次输入10个数值,也可以按回车一个个输入。在scanf一弹有详细讲解。

4、⼀维数组在内存中的存储


有了前面的知识,我们其实使用数组基本没有什么障碍了,如果我们要深入了解数组,我们最好能了解⼀下数组在内存中的存储。
依次打印数组元素的地址

#include <stdio.h>
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("&arr[%d] = %p\n", i, &arr[i]);
 }
 return 0;
}

782efb3868314b5e895f28a28fb7d3e0.png
此处结果为VS x86环境结果,指针打印的数值为16进制。

%p是指针占位符,打印地址,在printf弹有详细讲解占位符。

此处用到指针只是为了证明一维数组是连续存储的,指针在后序会详细讲解。
输出结果我们看看:

从输出的结果我们分析,数组随着下标的增长,地址是由小到大变化的,并且我们发现每两个相邻的元素之间相差4(因为⼀个整型是4个字节)。所以我们得出结论:数组在内存中是连续存放的。这就为后期我们使用指针访问数组奠定了基础。


5、sizeof计算数组元素个数


在遍历数组的时候,我们经常想知道数组的元素个数,那C语言中有办法使用程序计算数组元素个数吗?
答案是有的,可以使用sizeof。
sizeof 中C语言是⼀个关键字,是可以计算类型或者变量大小的,其实 sizeof 也可以计算数组的大小。
比如:
 

#include <stdio.h>
int main()
{
 int arr[10] = {0};
 printf("%d\n", sizeof(arr));
 return 0;
}


25bc7f69b948489b80ef2648141c3ade.png
这里输出的结果是40,计算的是数组所占内存空间的总大小,单位是字节。
我们又知道数组中所有元素的类型都是相同的,那只要计算出⼀个元素所占字节的个数,数组的元素个数就能算出来。这里我们选择第⼀个元素算大小就可以。

#include <stdio.h>
int main()
{
 int arr[10] = {0};
 printf("%d\n", sizeof(arr[0]));//计算⼀个元素的⼤⼩,单位是字节
 return 0;
}


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

#include <stdio.h>
int main()
{
 int arr[10] = {0};
 int sz = sizeof(arr)/sizeof(arr[0]);
 printf("%d\n", sz);
 return 0;
}

4b03a44ed93441508d6ab34a046a7a9a.png

这里的结果是:10,表示数组有10个元素。
以后在代码中需要数组元素个数的地方就不用固定写死了,使用上面的计算,不管数组怎么变化,计算出的大小也就随着变化了。

总结


本篇博客就结束啦,谢谢大家的观看,如果公主少年们有好的建议可以留言喔,谢谢大家啦!

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

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

相关文章

从c到c++——4:引用

前言 在《水浒传》中&#xff0c;梁山一百零八好汉&#xff0c;每个人都有一个响亮的外号&#xff0c;比如&#xff0c;当我们提到李逵和提到黑旋风提到铁牛时&#xff0c;本质上我们指的是同一个人。黑旋风江州劫法场&#xff0c;那李逵,铁牛也有江州劫法场的经历。引用也是…

【3.6数据库系统】数据库备份与恢复技术

目录 1.数据备份1.1备份方式1.2备份类型 2.数据库故障与恢复 1.数据备份 1.1备份方式 △冷备份也称为静态备份&#xff0c;别是将数据库正常关闭&#xff0c;在停止状态下&#xff0c;将数据库的文件全部备份(复制)下来。 △热备份也称为动态备份&#xff0c;是利用备份软件&a…

E7数据库备份和恢复

E7数据库备份和恢复 一、实验目的 在Mysql上&#xff0c;学习如何备份数据库和恢复的各种方法。 二、实验要求: 1、基本硬件配置:英特尔Pentium III 以上,大于4G内存&#xff1b; 2、软件要求:Mysql&#xff1b; 3、时间:1小时&#xff1b; 4、撰写实验报告并按时提交。 三、…

常用MQ产品的对比

常用MQ产品的对比 本文整理了常用MQ之间的对比&#xff0c;旨在帮助大家在实际项目中选择MQ产品。 消息队列对比参照表 注&#xff1a; 对照表来自&#xff1a;消息队列对比参照表 &#xff0c;对比维度比较全面&#xff0c;结果个人比较认同&#xff0c;强烈建议参考。 Rock…

【OCC学习23】使用Draw探索OCC API 【完结】

对于OCC应用开发者来说&#xff0c;OCC的文档虽然不错&#xff0c;但针对具体的需求找到合适的API还是得不断摸索。我发现看Draw的代码是探索OCC API使用的最佳路径。掌握根据Draw命令查找对应代码就能高效找到解决方案。所以这是本系列的最后一篇分享了&#xff0c;个人感觉OC…

TarGAN:多模态医学图像转换GAN

TarGAN 核心思想网络结构 核心思想 论文&#xff1a;https://arxiv.org/abs/2105.08993 代码&#xff1a;https://github.com/2165998/TarGAN 解决的问题&#xff1a;传统多模态医学图像转换通常&#xff0c;在生成高质量图像方面存在问题&#xff0c;特别是在关键目标区域或…

nginx安装ssl模块http_ssl_module

查看nginx安装的模块 /usr/local/nginx/sbin/nginx -V若出现“–with-http_ssl_module”说明已经安装过&#xff0c;否则继续执行下列步骤 进入nginx源文件目录 cd /usr/local/nginx/nginx-1.20.2重新编译nginx ./configure --with-http_ssl_module如果组件linux缺少&…

利用Burp Suite观察https通联

对使用 HTTPS 协议的应用程序进行测试时&#xff0c;常使用 bp 观察流量&#xff0c;为能成功建立HTTPS联接&#xff0c;在将bp设置居代理的同时&#xff0c;还必须导入bp伪证书&#xff0c;这样才能修改请求和响应&#xff0c;加密和解密流量&#xff0c;成功模拟浏览的各种动…

Web3创业:去中心化初创公司的崛起

随着Web3时代的到来&#xff0c;去中心化技术的崛起不仅令人瞩目&#xff0c;也为创业者带来了前所未有的机遇。在这个新的时代&#xff0c;一批去中心化初创公司正崭露头角&#xff0c;重新定义着商业和创新的边界。本文将深入探讨Web3创业的趋势&#xff0c;以及去中心化初创…

Your lDE is missing natures to properly support your projects

错误提示 Your lDE is missing natures to properly support your projects. Some extensions on the Eclipse Marketplace can be installed to support those natures.解决方案 打开项目文件&#xff0c;找到.project 文件&#xff0c;用编辑器打开 找到 把下图效果图中相关…

自然语言处理-文本标注

文本标注 现在让我们考虑词元级任务&#xff0c;比如文本标注&#xff08;text tagging&#xff09;&#xff0c;其中每个词元都被分配了一个标签。在文本标注任务中&#xff0c;词性标注为每个单词分配词性标记&#xff08;例如&#xff0c;形容词和限定词&#xff09;。 根据…

【iOS ARKit】人脸追踪之挂载虚拟元素

人脸跟踪&#xff08;Face Tracking&#xff09;是指将人脸检测扩展到视频序列&#xff0c;跟踪同一张人脸在视频序列中的位置。是论上讲&#xff0c;任何出现在视频中的人险都可以被跟踪&#xff0c;也即是说&#xff0c;在连续视频帧中检测到的人脸可以被识别为同一个人。人脸…

单片机面向对象思维的架构:时间轮片法

今天分享一篇单片机程序框架的文章。 程序架构重要性 很多人尤其是初学者在写代码的时候往往都是想一点写一点&#xff0c;最开始没有一个整体的规划&#xff0c;导致后面代码越写越乱&#xff0c;bug不断。 最终代码跑起来看似没有问题(有可能也真的没有问题)&#xff0c;但…

vue3创建多种遥感底图的网页教程

创建一个能调用多种遥感底图的网页教程 简介 大家好&#xff0c;我是锐多宝。 最近我正在使用vue3&#xff0c;这里记录一下我是如何使用vue3调用多种遥感底图。当然&#xff0c;如果你觉得安装vue麻烦&#xff0c;也可以直接使用原生的JavaScript&#xff0c;方法大同小异。…

机器学习:多元线性回归闭式解(Python)

import numpy as np import matplotlib.pyplot as pltclass LRClosedFormSol:def __init__(self, fit_interceptTrue, normalizeTrue):""":param fit_intercept: 是否训练bias:param normalize: 是否标准化数据"""self.theta None # 训练权重系…

【Chrome】浏览器怎么清除缓存并强制刷新

文章目录 1、正常刷新&#xff1a;正常刷新网页&#xff0c;网页有缓存则采用缓存。 F5 或 刷新键2、强制刷新&#xff1a;忽略缓存刷新&#xff0c;重新下载资源不用缓存。 CtrlF5 或 ShiftF5 或 CtrlShiftR3、在浏览器的设置里面清除所有数据

哪些 3D 建模软件值得推荐?

云端地球是一款免费的在线实景三维建模软件&#xff0c;不需要复杂的技巧&#xff0c;只要需要手机&#xff0c;多拍几张照片&#xff0c;就可以得到完整的三维模型&#xff01; 无论是大场景倾斜摄影测量还是小场景、小物体建模&#xff0c;都可以通过云端地球将二维数据向三…

MTP与管理壳(AAS)有异曲同工之妙

在过去的几年中&#xff0c;流程工业中的不同部门&#xff08;例如制药、精细化学品以及食品和饮料部门&#xff09;遇到了一系列共同且可比较的新兴挑战。这些挑战包括&#xff1a; 新产品的需求迅速接连不断&#xff0c;更快交货和更低价格的压力&#xff0c;更多定制产品&a…

【wvp】关于码率等的相关流程设计

目录 流程设计 前端UI大致设计 终端上的相关修改界面参考 流程设计 前端UI大致设计 终端上的相关修改界面参考

【WPF.NET开发】WPF中的双向功能

本文内容 FlowDirectionFlowDocumentSpan 元素非文本元素的 FlowDirection数字替换 与其他任何开发平台不同&#xff0c;WPF 具有许多支持双向内容快速开发的功能&#xff0c;例如&#xff0c;同一文档中混合了从左到右和从右到左的数据。 同时&#xff0c;WPF 也为需要双向功…