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

【C语言初阶(五)】数组

❣博主主页: 33的博客❣
▶文章专栏分类: C语言从入门到精通◀
🚚我的代码仓库: 33的代码仓库🚚

目录

  • 1. 前言
  • 2.一维数组的概念
  • 3.一维数组的创建和初始化
    • 3.1数组的创建
    • 3.2数组的初始化
    • 3.3数组的类型
  • 4.一维数组的使用
    • 4.1数组下标
    • 4.2数组元素打印
    • 4.4数组元素输入
  • 5. 一维数组在内存中的存储
  • 6.sizeof求数组个数
  • 7.二维数组
    • 7.1 二维数组的创建
    • 7.2二维数组初始化
  • 8.二维数组的使用
    • 8.1二维数组的下标
    • 8.2 二维数组的打印
    • 8.3 二维数组的输入
    • 8.4二维数组在内存中的存储
  • 9. 总结

1. 前言

前面我们已经学习了分支和循环,这篇文章我们一起来学习新的知识—数组,数组是一个十分常见的知识,接下来就一起进入数组的学习吧!
本章重点

本篇文章主要介绍数组的概念,一维数组的创建的初始化,一维数组的使用,一维数组在内存中的存储,二维数组的创建和初始化,二维数组的使用等等。


2.一维数组的概念

数组是一组相同类型元素的集合:

数组中存放的是一个或者多个数据,但数组元素不能为0,
数组中存放的多个数据,类型是相同的


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

3.1数组的创建

格式如下:

type arr_name[常量值];

type是指数组的类型,可以是:char、short、int等等。
arr_name是数组名,自定义。
[常量值] 常量值是用来定义数组的大小,自定义。

例如

int a[3];//定义了一个数组a长度为3

3.2数组的初始化

数组在创建的时候,我们需要得定义一些初始值,这种就称为数组的初始化。
那么数组该如何初始化呢?数组的初始化一般用大括号,将数据放在大括号内。数组的初始化又可以分为完全初始化和不完全初始化。
例如:

//完全初始化
int a[3]={1,2,3}
//不完全初始化
int a[5]={1}//第一个元素为初始化为1,其余默认初始化为0

3.3数组的类型

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

int a[3]={1}
char b[4]={'1'}

数组a的类型是int [3]
数组b的类型是char [4]


4.一维数组的使用

4.1数组下标

c语言中,数组下标是从0开始,假设数组的长度是n,那么数组的下标最大就是n-1.第1个数组元素可以写为a[0],第2个数组元素可以写为a[1],第3个数组元素可以写为a[2]…那么第n个数组元素就可以写为a[n-1]


4.2数组元素打印

如果要访问整个数组,该如何打印呢?接下来我们通过一段程序来实现

int main()
{
int arr[3]={1,2,3}int i=0;
for(i=0;i<3;i++){printf("%d",arr[i]);}
}

4.4数组元素输入

如果要从键盘中输入一个元素,存入数组中,那么又该如何实现呢?

int main()
{
int arr[3]={0}//默认初始化为0
int i=0;
for(i=0;i<3;i++){scanf("%d",&arr[i]);//从键盘中输入一个元素,存入数组arr中}
}

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

我们如果想要知道数组在内存中是如何存取的,我们可以通过打印数组中每个元素的地址来看看规律。

int main()
{int arr[6] = { 1,2,3,4,5,6};int i = 0;for (i = 0; i < 6; i++){printf("arr[%d]的地址=%p\n",i, &arr[i]);}
}

运行结果:
在这里插入图片描述
我们会发现a[0]到a[5]的地址依次增大,并且相邻两个数组元素相差4个字节,为什么是4个字节呢那是因为我们定义的元素类型为int类型,int类型的大小就是4个字节。我们就可以得出结论:数组在内存中是连续存放的,且随着下标的增大,数组地址也增大。


6.sizeof求数组个数

在遍历数组的时候,我们经常想知道数组的个数,就可以sizeof操作符来求。
例如:

int main()
{int arr[8] = {0};printf("%d", sizeof(arr));
}

结果:
在这里插入图片描述
个数应该是8个为什么返回32呢?其实是因为***sizeof计算的是数组所栈内存空间的总大小,单位为字节。***如果要计算数组的个数,只需要用 总内存空间/一个元素的内存

int main()
{int arr[8] = {0};printf("%d", sizeof(arr)/sizeof(arr[0]));
}

结果:
在这里插入图片描述
输出结果为8个


7.二维数组

概率:把一维数组作为数组的元素,那么就是二维数组。


7.1 二维数组的创建

定义二维数组格式如下:

type arr_name[常量值1][常量值2];
//例如
int a[3][5];//定义三行5列的数组

7.2二维数组初始化

例如

int arr1[2][3]={1,2,3,4,5,6};//完全初始化
int arr2[2][3]={1,2,3};//不完全初始化,其他值默认为0
int arr3[2][3]={{1,2,3},{4,5,6}};//按照行初始化
int arr4[][3]={1,2,3,4};//初始化的时候行可以省略,但是列一定不能省!!

8.二维数组的使用

8.1二维数组的下标

一维数组的访问需要下标,其实二维数组的访问也需要下标,二维数组是有行有列的,只要确定了行列就可以访问了。

int arr[2][3]={1,2,3,4,5,6};

如下图:
在这里插入图片描述
我们可以用arr[1][2]来表示6,我们可以用arr[][1]来表示2


8.2 二维数组的打印

int main()
{
int arr[2][3]={1,2,3,4,5};
int i = 0;
int j = 0;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}

8.3 二维数组的输入

前面我们已经学习了一维数组的输入,那么二维数组该怎么输入呢?其实和一维数组很类似。
如下:

int main()
{
int arr[2][3]={0};
int i = 0;
int j = 0;
for(i=0;i<2;i++)
{for(j=0;j<3;j++)
{scanf("%d ",&arr[i][j]);
}
return 0;
}
}

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

在上述内容中我们已经得出结论:一维数组在内存中是连续存放的,且随着下标的增大,数组地址也增大,那二维数组是否也存在这样的规律呢?
我们来进行验证:

int main()
{int arr[2][3] = { 1,2,3,4,5 };int i = 0;int j = 0;for (i = 0; i < 2; i++){for (j = 0; j < 3; j++){printf("arr[%d][%d] = %p\n", i,j,&arr[i][j]);}	}return 0;
}

结果如下:
在这里插入图片描述

我们发现和一维数组一样,二维数组在内存中是连续存放的,且随着下标的增大,数组地址也增大。


9. 总结

本篇文章主要介绍数组的概念,一维数组的创建的初始化,一维数组的使用,一维数组在内存中的存储,二维数组的创建和初始化,二维数组的使用,有想法的同学可以通过本篇文章的知识来完成二分查找,两边向中间输入等关于c语言的学习博主就先告一段了,接下来将进行java的学习,如果同学们想继续深入学习,可以去看看其他博主的文章。


相关文章:

【C语言初阶(五)】数组

❣博主主页: 33的博客❣ ▶文章专栏分类: C语言从入门到精通◀ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; 目录 1. 前言2.一维数组的概念3.一维数组的创建和初始化3.1数组的创建3.2数组的初始化3.3数组的类型 4.一维数组的使用4.1数组下标4.2数组元素打印4.4数组元…...

词令微信小程序怎么添加到我的小程序?

微信小程序怎么添加到我的小程序&#xff1f; 1、找到并打开要添加的小程序&#xff1b; 2、打开小程序后&#xff0c;点击右上角的「…」 3、点击后底部弹窗更多选项&#xff0c;请找到并点击「添加到我的小程序」&#xff1b; 4、添加成功后&#xff0c;就可以在首页下拉我的…...

【PyTorch】基础学习:在Pycharm等IDE中打印或查看Pytorch版本信息

【PyTorch】基础学习&#xff1a;在Pycharm等IDE中打印或查看Pytorch版本信息 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1…...

SDN网络简单认识(2)——南向接口

目录 一、概述 二、南向接口与南向协议 2.1 南向接口&#xff08;Southbound Interfaces&#xff09; 2.2 南向协议&#xff08;Southbound Protocols&#xff09; 2.3 区别与联系 三、常见南向协议 2.1 OpenFlow 2.2 OVSDB&#xff08;Open vSwitch Database Manageme…...

如何保存缓存和MySQL的双写一致呢?

如何保存缓存和MySQL的双写一致呢&#xff1f; 所谓的双写一致指的是&#xff0c;在同时使用缓存(如Redis)和数据库(如MySQL)的场景下,确保数据在缓存和数据库中的更新操作保持一致。当对数据进行修改的时候&#xff0c;无论是先修改缓存还是先修改数据库&#xff0c;最终都要保…...

第十三篇:复习Java面向对象

文章目录 一、面向对象的概念二、类和对象1. 如何定义/使用类2. 定义类的补充注意事项 三、面向对象三大特征1. 封装2. 继承2.1 例子2.2 继承类型2.3 继承的特性2.4 继承中的关键字2.4.1 extend2.4.2 implements2.4.3 super/this2.4.4 final 3. 多态4. 抽象类4.1 抽象类4.2 抽象…...

PyTorch学习笔记之基础函数篇(四)

文章目录 2.8 torch.logspace函数讲解2.9 torch.ones函数2.10 torch.rand函数2.11 torch.randn函数2.12 torch.zeros函数 2.8 torch.logspace函数讲解 torch.logspace 函数在 PyTorch 中用于生成一个在对数尺度上均匀分布的张量&#xff08;tensor&#xff09;。这意味着张量中…...

C++/CLI学习笔记3(快速打通c++与c#相互调用的桥梁)

c/cli变量和操作符 3.1:什么是变里 变量是存储数据以便应用程序临时使用的内存位置&#xff0c;具有名称、类型和值。变量值在应用程序执行期间可能改变&#xff0c;变量名也是。变量使用前必须声明&#xff0c;即指定类型和提供名称。变量的类型决定了值的范围以及能执行的操…...

unity

Unity官方下载_Unity最新版_从Unity Hub下载安装 | Unity中国官网 Unity Remote - Unity 手册 登陆账号&#xff0c;找到一个3d 免费资源 3D Animations & Models | Unity Asset Store unity 里面window->package Manager 里面可以看到自己的asset &#xff0c;下载后…...

考研复习C语言初阶(3)

目录 一.函数是什么? 二.C语言中函数的分类 2.1库函数 2.2自定义函数 三.函数的参数 3.1实际参数&#xff08;实参&#xff09; 3.2 形式参数&#xff08;形参&#xff09; 四.函数的调用 4.1 传值调用 4.2 传址调用 五. 函数的嵌套调用和链式访问 5.1 嵌套调用 5…...

CCF 202009-3 点亮数字人生(拓扑排序)

题目背景 土豪大学的计算机系开了一门数字逻辑电路课&#xff0c;第一个实验叫做“点亮数字人生”&#xff0c;要用最基础的逻辑元件组装出实际可用的电路。时间已经是深夜了&#xff0c;尽管实验箱上密密麻麻的连线已经拆装了好几遍&#xff0c;小君同学却依旧没能让她的电路正…...

Docker笔记-进入运行中的镜像,查看日志等操作

docker搭建好后&#xff0c;查看运行的docker镜像&#xff1a; docker ps -a 进入运行的容器&#xff0c;命令如下&#xff1a; docker exec -it <容器ID> /bin/bash # 或者&#xff0c;直接用容器里面的命令&#xff0c;比如mysql镜像 docker exec -it <容器ID>…...

大语言模型(LLM) RAG概念

RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种用于自然语言处理的模型架构&#xff0c;特别是针对生成式任务。RAG模型结合了检索和生成两种方法&#xff0c;以提高生成式任务的性能。它将信息检索&#xff08;Retrieval&#xff09;和文本生成&#xff08…...

PHP使用AES进行加解密

前言 对接一个第三方平台&#xff0c;其使用AES对称加密 代码 //方式1 //加密 function enAES($originTxt, $keyQ6Mr6rDpn12iZb){return base64_encode(openssl_encrypt($originTxt, AES-128-ECB,$key, OPENSSL_RAW_DATA)); }//解密 function deAES($originTxt, $keyQ6Mr6rD…...

20240313寻找集成联调交付的具体方式

集成联调交付&#xff08;Integrated Joint Debugging and Delivery&#xff09;是软件开发过程中的一个阶段&#xff0c;主要涉及将不同的软件模块或组件整合在一起&#xff0c;并进行联合调试和测试&#xff0c;以确保它们能够作为一个整体正常工作。这个过程通常发生在开发周…...

makefile 学习

patsubst 函数 原型$(patsubst 原模式&#xff0c; 目标模式&#xff0c; 文件列表) 如果文件列表中没有匹配的字符串&#xff0c;就会把整个文件列表的值赋值给变量 // 如果当前目录下有 main.cpp test.cpp SRC $(wildcard *.cpp *.c) # 在工作目录下寻找所有c cpp 文件 …...

释放人工智能的力量:GPU服务器托管和高电机柜托管的关键作用

随着人工智能技术的不断发展&#xff0c;GPU服务器托管和高电机柜托管也变得愈发重要。这些技术在人工智能领域发挥着关键作用&#xff0c;为AI算法的训练和推理提供了强大的计算支持。 GPU服务器托管是指将GPU服务器放置在专门的数据中心中&#xff0c;通过云服务提供商提供的…...

70后姐妹上海创业,要IPO了

一种能与消费者高效互动的自动贩卖机&#xff0c;不仅于近日将一家上海公司送到港交所的门前&#xff0c;还让一对70后姐妹的身价超过13亿元。 在殷珏辉和妹妹殷珏莲的带领下&#xff0c;中国营销服务提供商趣致集团坐拥7543台自动贩卖机和超过5000万注册用户。通过为品牌方提…...

React Hooks、useState、useEffect 、react函数状态

Hooks Hooks 概念理解 学习目标&#xff1a; 理解 Hooks 的概念及解决的问题 什么是 hooks hooks 的本质&#xff1a; 一套能够使函数组件更强大、更灵活的&#xff08;钩子&#xff09; React 体系里组件分为类组件和函数组件 多年使用发现&#xff0c;函数组件是一个更加匹…...

wsl-oraclelinux 固定ip

wsl-oraclelinux 固定ip 0. 引言1. Windows 创建启动脚本2. 配置 wsl Oracle Linux 0. 引言 工作需要&#xff0c;安装了一个 wsl Oracle Linux 8.9&#xff0c;也想给它一个固定的 ip。 1. Windows 创建启动脚本 删除 PSScheduledJob&#xff0c; notepad $PSHOME\powersh…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...