【玩转C语言】第五讲--->数组-->一维和多维深度理解

news2024/9/22 15:34:11

 🔥博客主页🔥:【 坊钰_CSDN博客 】

欢迎各位点赞👍评论✍收藏⭐

引言:

大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识,另外,还会不定时更新【C语言训练题库】,想学好C语言的宝子们,一定要收藏起来,一起努力吧!

点赞!收藏!以防以后找不到了!!!

目录

1. 数组的概念

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

2.1 数组创建

2.2 数组的初始化

2.3 数组的类型

3. 一维数组

3.1 数组下标

3.2 数组打印

3.3 数组的输入

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

5. sizeof计算元素个数

6. 二维数组

6.1 二维数组的创建

7. 二维数组的初始化

7.1 不完全初始化

7.2 完全初始化

7.3 按行初始化

7.4 可省略行,不可省略列

8. 二维数组的使用

 8.1 二维数组的下标

8.2 二维数组的输入和输出

9. 二维数组在内存中的存储

10. 小结


1. 数组的概念

数组是⼀组相同类型元素的集合,有两点要记住

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

数组分为⼀维数组和多维数组

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

2.1 数组创建

type arr_name[m]
  • type:为数组的数据类型
  • arr_name:为数组名
  • m:为数组大小

例:

一个班有20个学生

int Student[20]

2.2 数组的初始化

在创建的同时给予相应的元素,例:

//完全初始化

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

//不完全初始化

int arr[10] = {1};   //第一个元素为1,后面全为0

2.3 数组的类型

数组跟数据一样,有整型,字符型,浮点型

例:

int arr[10]  //整型数组

char arr[10]  //字符型数组

double arr[10]  //浮点型数组

3. 一维数组

平常使用的都为一维数组,如:

int arr[10]

char arr[10]

...

3.1 数组下标

我们看一张图

数组的下标从 0 开始的,一个数组有 n 个元素,那最后一个元素的下标为 n-1 

例:

#include <stdio.h>

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

 结果:

3.2 数组打印

那么我们该如何打印一个数组的元素呢?

一个数组有多个元素,我们需要使用到循环(for循环) 

例:

#include <stdio.h>

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

结果:

3.3 数组的输入

 明白数组的打印,我们也可以按我们的需要来输入元素

例:

#include <stdio.h>

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

结果:

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

数组中元素,随着下标的增大,地址随之增大,那数组中元素是如何存放的呢?

我们打印数组元素的地址:

#include <stdio.h>

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

	return 0;
}

 

从输出的结果我们分析,数组随着下标的增长,地址是由小到大变化的,并且我们发现每两个相邻的 元素之间相差4(因为⼀个整型是4个字节) 

得出结论:数组在内存中是连续存放的

5. sizeof计算元素个数

当我们想要快速知道数组元素个数时,就可以利用sizeof 操作符

例:

#include <stdio.h>

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

 关键:

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

用整个数组大小除以一个元素的大小就可以得到数组的元素个数

6. 二维数组

了解了一维数组,我们来了解二维数组

6.1 二维数组的创建

int arr[3][4];

char arr[5][4];
  • 3表示数组有3行
  • 4表示每⼀行有4个元素
  • int 表示数组的每个元素是整型类型
  • arr 是数组名,可以根据自己的需要指定名

7. 二维数组的初始化

7.1 不完全初始化

int arr1[3][5] = {1,2};
int arr2[3][5] = {0};

 

7.2 完全初始化

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

 

7.3 按行初始化

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

 

7.4 可省略行,不可省略列

int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};

 

8. 二维数组的使用

 8.1 二维数组的下标

建立一个二维数组

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

例:


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

结果:

8.2 二维数组的输入和输出

知道如何建立二维数组,那我们来了解二维数组的输入和输出

例:

#include <stdio.h>

int main()
{
	int arr[3][5] = {0};
	for (int i = 0; i < 3; i++)   //产生行号
	{
		for (int j = 0; j < 5; j++)  //产生列号
		{
			scanf("%d ", &arr[i][j]);  //输入
		}
	}

	for (int i = 0; i < 3; i++)    //产生行号
	{
		for (int j = 0; j < 5; j++)   //产生列号
		{
			printf("%d ", arr[i][j]);   //输出
		}
		printf("\n");
	}
	return 0;
}

 结果:

9. 二维数组在内存中的存储

知道了一维数组在内存中的存储,让我们来了解一下二维数组的

例: 

#include <stdio.h>

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

从输出的结果来看,每⼀行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元 素(如:arr[0][4]和arr[1][0])之间也是差4个字节

得出结论:⼆维数组中的每个元素都是连续存放的

10. 小结

以上就是关于【玩转C语言】第五讲的内容了,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持!

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

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

相关文章

你还在为文件翻译烦恼吗?试试这四款神器,轻松搞定一切!

现如今的信息传播速度不断得加快&#xff0c;无论是中外交流还是学习&#xff0c;也越来越多小语种出现在我们的工作和生活当中来了&#xff0c;其中不伐一些文件批量的形式&#xff0c;所以今天就具体来探讨一下&#xff0c;关于文件翻译的四款辅助工具&#xff1a; 一、福昕在…

openGauss触发器详解

openGauss 是一款开源关系型数据库管理系统&#xff0c;广泛应用于企业级应用中。随着数据量的增长和业务逻辑的复杂化&#xff0c;数据库管理和操作的自动化需求越来越高。触发器&#xff08;Triggers&#xff09;作为数据库中重要的编程工具&#xff0c;能够极大地简化复杂操…

广州机房服务器搬迁布线方案

友力科技&#xff08;广州&#xff09;有限公司&#xff0c;专业从事数据中心机房建设、改造和搬迁工程。友力科技&#xff08;广州&#xff09;有限公司提供的服务内容包括但不限于&#xff1a;原数据中心设备下架准备、沿途运输、新数据中心上架运行、数据迁移等。 友力科技…

前端面试细节重难点(十二)(已工作|做分享)

1、如何区分在react、vue和js中的是否传递e参数&#xff1f;事件对象e都要通过event作为实参显示传递形参才可接收到吗&#xff1f; 答&#xff1a;&#xff08;1&#xff09;在原生JavaScript中&#xff1a;事件对象e需要通过函数参数显式传递。 &#xff08;2&#xff09;在R…

观测云加入华为云「新加坡云联盟」,引领亚太创新潮流

7月19日&#xff0c;「新加坡云联盟」在华为云新加坡峰会2024上正式宣告成立。这一创新的联合不仅是新加坡乃至整个亚太地区云服务领域的重要里程碑&#xff0c;更是全球数字化转型进程中的关键一步。 观测云作为联盟的首批成员之一&#xff0c;在成立仪式上精彩亮相&#xff0…

探索能源管理体系认证的意义与实施

能源管理体系&#xff08;Energy Management System, EnMS&#xff09;是一个综合性的框架&#xff0c;旨在帮助企业系统地管理能源使用&#xff0c;提升能源效率&#xff0c;实现可持续发展的目标。这个体系包括了企业的组织结构、职责分配、惯例、程序、过程以及资源管理。通…

Linux中为qt添加opencv

一. 安装OpenCV库&#xff1a; 打开终端&#xff0c;输入以下命令安装OpenCV&#xff1a; sudo apt-get update sudo apt-get install libopencv-dev二. 配置Qt项目 在Qt Creator中打开项目&#xff0c;然后编辑.pro文件&#xff0c;添加以下内容&#xff1a; INCLUDEPATH …

2024年必备的9大CRM工具选购指南

本文介绍的工具有&#xff1a;纷享销客、Zoho CRM、八百客、红圈通、简道云、简信CRM、Salesforce、HubSpot CRM、Apptivo。 在选择合适的CRM系统时&#xff0c;许多企业面临着功能繁多、选择困难的痛点。对于中小企业来说&#xff0c;找到一个既能提高客户关系管理效率&#x…

Java基础-Java多线程机制

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、引言 二、多线程的基本概念 1. 线程与进程 2. 多线程与并发 3. 多线程的优势 三、Java多线程的实…

GUL图形化界面操作(上部)

目录 AWT Frame对象&#xff1a;创建窗口 ​编辑 该对象相关的属性 设置窗口大小&#xff08;对象.setsize(int,int)&#xff09; 让窗口可以显现出来&#xff08;对象.setVisible(bool)&#xff09; 设置窗口标题&#xff08;对象.setTitle(String)&#xff09; 设置窗…

MySQL学习(14):索引使用规则

1. 索引语法 #创建索引 create [unique|fulltext] index 索引名 on 表名 (字段名,...); #字段可以有多个 #如果不加unique或fulltext&#xff0c;那么将创建一个普通索引 #在InnoDB引擎小&#xff0c;创建的索引默认是Btree结构#查看索引 show index from 表名;#删除索引 drop…

折叠群控FPV穿越机技术详解

折叠群控FPV穿越机技术是一个结合了多项高端技术和飞行理念的创新系统。以下是该技术的详细解析&#xff1a; 1. 技术概述&#xff1a; - FPV穿越机&#xff1a;FPV&#xff0c;全称First Person View&#xff0c;即“第一人称视角”&#xff0c;是指通过无人机上搭载的摄像头&…

Python+Pytest+Allure+Yaml+Pymysql+Jenkins+GitLab运行原理

PythonPytestAllureYamlPymysqlJenkinsGitLab运行原理逻辑及调用关系 GitLab代码仓&#xff1a; Jenkins工作空间&#xff1a; 代码&#xff1a; 测试报告展示&#xff1a;

医疗器械上市欧美,需要什么样的网络安全相关申报文件?

医疗器械在欧美上市时&#xff0c;需要提交的网络安全相关申报文件主要包括以下几个方面&#xff0c;这些要求基于欧美地区的法律法规和监管机构的指导文件。 一、美国FDA要求 1. 网络安全管理计划 内容&#xff1a;制造商需要提交一份网络安全管理计划&#xff0c;该计划应包含…

blender顶点乱飞的问题解决

初学blender&#xff0c;编辑模式下移动某些顶点&#xff0c;不管是移动还是滑动都会出现定点乱飞的问题&#xff0c;后来才发现是开了吸附工具的原因&#xff01;&#xff01;&#xff01;&#xff01; 像下面这样&#xff0c;其实我只是在Z轴上移动&#xff0c;但是就跑的很…

经纬恒润与奇瑞汽车签订新能源项目重点供应商合作协议,共同开启合作新篇章

近日&#xff0c;2024年国家级芜湖经开区汽车零部件生态大会成功举行&#xff0c;经纬恒润受邀出席&#xff0c;与行业各伙伴齐聚经开区&#xff0c;同绘发展蓝图&#xff0c;助力经开区汽车产业高质量发展。会上&#xff0c;经纬恒润与奇瑞汽车签署合作协议&#xff0c;成为奇…

2-43 基于matlab的RBF网络自适应控制应用

基于matlab的RBF网络自适应控制应用&#xff0c;使用RBF网络逼近一级倒立摆模型中未知的非线性函数部分&#xff0c;即用RBF网络代替一级倒立摆模型中未知非线性函数部分&#xff0c;从而设计自适应控制&#xff0c;实现一级倒立摆的平衡控制。程序已调通&#xff0c;可直接运行…

卡夫卡(Kafka)框架详解:从背景到应用实践

卡夫卡&#xff08;Kafka&#xff09;框架详解&#xff1a;从背景到应用实践 引言 在大数据和分布式系统日益普及的今天&#xff0c;数据处理和消息传递成为了支撑复杂业务系统的关键基础设施。Apache Kafka&#xff0c;作为一个高性能的分布式消息队列系统&#xff0c;因其高…

qt 如何制作动态库插件

首先 首先第一点要确定我们的接口是固定的&#xff0c;也就是要确定 #ifndef RTSPPLUGIN_H #define RTSPPLUGIN_H #include "rtspplugin_global.h" typedef void (*func_callback)(uint8_t* data,int len,uint32_t ssrc,uint32_t ts,const char* ipfrom,uint16_t f…

C/C++樱花树代码

目录 写在前面 系列文章 C简介 完整代码 代码分析 写在后面 写在前面 C实现精美的樱花树&#xff0c;只需这100行代码&#xff01; 系列文章 序号目录直达链接1爱心代码https://want595.blog.csdn.net/article/details/1363606842李峋同款跳动的爱心https://want595.b…