【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的学习,如果同学们想继续深入学习,可以去看看其他博主的文章。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法——前缀和之除自身以外数组的乘积、和为K的子数组、和可被K整除的子数组、连续数组、矩阵区域和

这几道题对于我们前面讲过的一维、二维前缀和进行了运用,包含了面对特殊情况的反操作 目录 4.除自身以外数组的乘积 4.1解析 4.2题解 5.和为K的子数组 5.1解析 5.2题解 6.和可被K整除的子数组 6.1解析 6.2题解 7.连续数组 7.1题解 7.2题解 8.矩阵区域和 8.1解析 …

Ubuntu 20.04 系统如何优雅地安装NCL?

一、什么是NCL&#xff1f; NCAR Command Language&#xff08;NCL&#xff09;是由美国大气研究中心&#xff08;NCAR&#xff09;推出的一款用于科学数据计算和可视化的免费软件。 它有着非常强大的文件输入和输出功能&#xff0c;可读写netCDF-3、netCDF-4 classic、HDF4、b…

使用PWM实现呼吸灯功能

CC表示的意思位捕获比较&#xff0c;CCR表示的是捕获比较寄存器 占空比等效于PWM模拟出来的电压的多少&#xff0c;占空比越大等效出的模拟电压越趋近于高电平&#xff0c;占空比越小等效出来的模拟电压越趋近于低电平&#xff0c;分辨率表示的是占空比变化的精细程度&#xf…

MATLAB:拟合与插值

一、关于多项式的基本操作 若要求非线性方程的根&#xff0c;则采用fzero, fminbnd函数 二、多项式拟合 clc, clear x0:0.2:10; y0.25*x20*sin(x); plot(x,y,k.,MarkerSize,15) grid on; hold on [p1,s1,mu1]polyfit(x,y,3); %3阶多项式拟合 y1polyval(p1,x,s1,mu1); [p2,s…

mmz批量多页抓取数据-AES.CBC算法-爬虫

目标&#xff1a;mmz多页下载 方法&#xff1a;加一个for循环实现多页的下载 问题&#xff1a;浏览器传输服务器时对页码参数做了加密处理 解决方法&#xff1a; 1、判断加密算法模式&#xff08;mmz是AES-CBC算法&#xff09; 2、找到加密的key和iv 代码&#xff1a; i…

微信小程序开发学习笔记——3.11完成form评论案例的实现逻辑

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;https://www.bilibili.com/video/BV19G4y1K74d?p25&vd_source9b149469177ab5fdc47515e14cf3cf74 一、javascript参考手册——splice https://www.…

9.用FFmpeg测试H.264文件的解码时间

1. Essence of Method 要测试对H.264文件的解码时间&#xff0c;可以使用FFmpeg进行操作。FFmpeg是一个开源的多媒体处理工具&#xff0c;可以用来处理视频和音频文件&#xff0c;包括解码H.264文件。以下是使用FFmpeg的命令行来测试解码时间的方法&#xff1a; ffmpeg -i in…

01_什么是深度学习

人工智能包含了机器学习&#xff0c;而深度学习是机器学习的一个分支。 人工智能 试图将通常由人类完成的智力任务自动化—这就是人工智能。 用硬编码的方式实现人工智能&#xff0c;这称作符号主义人工智能Symbolic AI。其中包含专家系统。 机器学习 机器学习是一种替代符…

一个接口白嫖四个AI平台, 五个翻译平台

牙叔教程 简单易懂 家人们, 我这标题起的咋样, 请在评论区打出你对标题的评价 今天我们介绍的仓库是 OneYiGitHub - snailuncle/oneyi: 一个翻译接口, 对接多个平台, one译. 完全免费开源, 没有任何限制, 这是一个翻译接口, 他支持以下平台 五个翻译平台 小牛翻译 小牛翻译开…

sparksession对象简介

什么是sparksession对象 spark2.0之后&#xff0c;sparksession对象是spark编码的统一入口对象&#xff0c;通常我们在rdd编程时&#xff0c;需要SparkContext对象作为RDD编程入口&#xff0c;但sparksession对象既可以作为RDD编程对象入口&#xff0c;在sparkcore编程中可以通…

ARP和DDOS攻击防御介绍

学习目标&#xff1a; 1. 如何利用ARP漏洞进行攻击&#xff1f; 2. 怎样有效地防御ARP攻击&#xff1f; 3. 如何应对DDOS攻击&#xff1f; ARP攻击如何产生&#xff1f; ARP如何进行有效防御&#xff1f; ARP基础工作原理&#xff1a; 交换机会根据mac地址表&#xff0c;进行转…

书客护眼落地灯销量火爆,售罄、补货、又断货、再补货!又成断货王!

今日&#xff0c;备受关注的书客Sun护眼大路灯在市场上掀起了一股抢购热潮&#xff0c;作为近年来照明领域中最大的黑马品牌&#xff0c;始终坚持并最求技术创新的书客品牌&#xff0c;在近日发布全新系列落地护眼台灯后&#xff0c;不仅备受消费者青睐&#xff0c;更是成为了新…

C#,T检验(T -Test)的算法与源代码

1 T-Test 学生t检验(英语:Students t-test)是指虚无假设成立时的任一检定统计有学生t-分布的统计假说检定,属于母数统计。学生t检验常作为检验一群来自正态分配母体的独立样本之期望值的是否为某一实数,或是二群来自正态分配母体的独立样本之期望值的差是否为某一实数。举…

ABC345(A-C)

A - Leftrightarrow(100 points) 语法题&#xff0c;输入一个字符串&#xff0c;判断是否是&#xff1a;的样式&#xff0c;输入后只需判断是第一个和最后一个字符是否分别为">"和"<",再判断中间是否都是""即可。 #include<bits/stdc…

【C语言步行梯】C语言实现三子棋游戏(含详细分析)

&#x1f3af;每日努力一点点&#xff0c;技术进步看得见 &#x1f3e0;专栏介绍&#xff1a;【C语言步行梯】专栏用于介绍C语言相关内容&#xff0c;每篇文章将通过图片代码片段网络相关题目的方式编写&#xff0c;欢迎订阅~~ 文章目录 需求分析具体实现主函数体菜单实现游戏实…

sqllab第二十关通关笔记

知识点&#xff1a; cookie注入 可以进行url解析错误注入传参位置 get请求post请求cookie传参 输入admin admin进行登录&#xff0c;抓取当前数据包 通过放包发现是一个302跳转的响应包&#xff0c;页面只有一个 I Love Cookies&#xff1b;没什么信息 通过点击页面上方的按钮…

【Java】List, Set, Queue, Map 区别?

目录 List, Set, Queue, Map 区别&#xff1f; Collection和Collections List ArrayList 和 Array区别&#xff1f; ArrayList与LinkedList区别? ArrayList 能添加null吗&#xff1f; ArrayList 插入和删除时间复杂度&#xff1f; LinkedList 插入和删除时间复杂度&…

Vue2(4)——iHRM组织架构

组织架构-树组件应用 树形组件-用层级结构展示信息&#xff0c;可展开或折叠。 属性设置 data(绑定数据)props(设置属性)- children(设置子节点的字段名)/ label(设置显示内容的字段名)default-expand-all(默认展开所有节点) 组织架构-树组件自定义结构 显示右侧结构 节点结…

Vue2(三):绑定样式、条件渲染(v-if,v-show)、列表渲染(v-for)、key的原理、列表过滤、列表排序

一、绑定样式 1.绑定class样式 (1)字符串写法 适用于&#xff1a;样式类名不确定&#xff0c;需要动态获取。 <div id"root"><div class"basic" :class"mood" click"changeMood">test</div><!-- class是原本的…

【Python】进阶学习:基于Numpy实现按指定维度拼接两个数组

【Python】进阶学习&#xff1a;基于Numpy实现按指定维度拼接两个数组 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希…