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

 🔥博客主页🔥:【 坊钰_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.xdnf.cn/news/1487664.html

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

相关文章

如何使用 SQLite ?

SQLite 是一个轻量级、嵌入式的关系型数据库管理系统&#xff08;RDBMS&#xff09;。它是一种 C 库&#xff0c;实现了自给自足、无服务器、零配置、事务性 SQL 数据库引擎。SQLite 的源代码是开放的&#xff0c;完全在公共领域。它被广泛用于各种应用程序&#xff0c;包括浏览…

重生之“我打数据结构,真的假的?”--4.二叉树(无习题)

1.二叉树 1.1概念与结构 在树形结构中&#xff0c;我们最常⽤的就是⼆叉树&#xff0c;⼀棵⼆叉树是结点的⼀个有限集合&#xff0c;该集合由⼀个根结点 加上两棵别称为左⼦树和右⼦树的⼆叉树组成或者为空。 1. ⼆叉树不存在度⼤于 2 的结点 2. ⼆叉树的⼦树有左右之分&…

《梦醒蝶飞:释放Excel函数与公式的力量》20.2 教学材料的自动化处理

第20章&#xff1a;自动化教学辅助工具 20.2 教学材料的自动化处理 自动化处理教学材料是利用编程技术和工具&#xff0c;自动执行教学材料的生成、整理和分发等任务的过程。通过自动化&#xff0c;可以提高教学材料处理的效率&#xff0c;减少手动操作的时间&#xff0c;从而…

用Swagger进行后端接口测试的实战操作

目录 一.什么是Swagger&#xff1f; 二.Swagger的使用操作流程&#xff1a; 1.在pom.xml配置文件导入 Knife4j 的依赖&#xff1a; 2.在config配置类中加入 Knife4j 的相关配置并设置静态资源映射&#xff08;否则接口文档无法访问&#xff09;&#xff1a; 三.Swagger的四个…

InteliJ IDEA最新2024版下载安装与快速配置激活使用教程+jdk下载配置

第一步&#xff1a;下载ideaIC-2024.1.4 方法1&#xff1a;在线链接 IntelliJ IDEA – the Leading Java and Kotlin IDE (jetbrains.com) 选择社区版进行下载 方法2&#xff1a;百度网盘 链接&#xff1a;https://pan.baidu.com/s/1ydS6krUX6eE_AdW4uGV_6w?pwdsbfm 提取…

解决django与sqlite3不兼容报SQLite 3.9.0 or later is required错的问题

今天在尝试用pytest进行django的单元测试&#xff0c;pytest用的数据库是sqlite3&#xff0c;在window环境下测试得好好的&#xff0c;但是放到linux环境下就报错&#xff0c;具体是报django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found …

LabVIEW学习-LabVIEW处理带分隔符的字符串从而获取数据

带分隔符的字符串很好处理&#xff0c;只需要使用"分隔符字符串至一维字符串数组"函数或者"一维字符串数组至分隔符字符串"函数就可以很轻松地处理带分隔符地字符串。 这两个函数所在的位置为&#xff1a; 函数选板->字符串->附加字符串函数->分…

超声波俱乐部:AI应用大爆发前夜,场景、闭环与LLM进化

7月13日&#xff0c;第十九期超声波俱乐部内部分享会在北京望京举行&#xff0c;本期的主题是&#xff1a;AI应用大爆发前夜&#xff0c;场景、闭环与LLM进化。 到场的嘉宾有&#xff1a;超声波创始人杨子超&#xff0c;超声波联合创始人、和牛商业创始人刘思雨&#xff0c;豆…

html+css 边框滑动按钮效果

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

基于 HTML+ECharts 实现智慧工地数据可视化大屏(含源码)

构建智慧工地数据可视化大屏&#xff1a;基于 HTML 和 ECharts 的实现 智慧工地已成为建筑行业的新趋势。通过实时监控和数据分析&#xff0c;智慧工地可以提高施工效率、降低安全风险。本文将详细介绍如何利用 HTML 和 ECharts 实现一个功能强大的智慧工地数据可视化大屏。 源…

vue3前端开发-小兔鲜项目-sku的实现

vue3前端开发-小兔鲜项目-sku的实现&#xff01;这是一个会计学的特殊专业名词&#xff0c;可以理解为产品的型号&#xff0c;规格的货品计量单位。 它是一组数据的混合体。比如&#xff1a;尺寸&#xff0c;材料&#xff0c;品质&#xff0c;等等。组合在一起形成的一个混合数…

pikachu Fileinclusion(local)

随便选择一个都试试 发现url上数字会变 发现文件名确实是file1.php~file5.php 那么会不会还有别的burp抓包选中数字 设置6-100的爆破 strat attack 678异常还有个100也是 先改一下试试看 其他的会报错 但是通过这我们可以得到路径 先写一个 下一步 读取系统文件 windows系统肯定…

产品系统的UI暗色系和浅色系模式切换是符合人体视觉工程学的设计

视觉革命&#xff1a;UI设计中的暗夜与黎明 UI设计如同夜空中最亮的星辰&#xff0c;引领着用户穿梭于信息的海洋。而今&#xff0c;一场视觉革命正在悄然上演&#xff0c;它关乎于我们的眼睛&#xff0c;关乎于我们的体验——那就是产品系统的UI暗色系和浅色系模式的切换。如…

Git merge

Git merge 参考文档&#xff1a; https://marsishandsome.github.io/2019/07/Three_Way_Merge https://git-scm.com/docs/merge-strategies https://stackoverflow.com/questions/56889406/how-does-git-compare-two-files-while-merging Git merge的目标是合并changes&#x…

web小项目-曼波生日录(Servlet+JSP+MySQL)

效果演示&#xff1a; 当记录条数过多时会自动出现滚轮&#xff0c;数据不会超出紫框 数据库实时记录&#xff1a; 项目源代码以及所用到的资源&#xff1a; 链接: https://pan.baidu.com/s/1w0czmH9xBfetk7CZ7RNbtQ?pwd6666 提取码: 6666 复制这段内容后打开百度网盘手机App…

vue3+openLayers点击标记事件

<template><!--地图--><div class"distributeMap" id"distributeMap"></div> </template> <script lang"ts" setup> import { onMounted, reactive } from "vue"; import { Feature, Map, View }…

一款允许使用Docker部署本地托管的、基于 Web 的 PDF 操作工具

大家好&#xff0c;今天给大家分享的是一个基于Spring Boot开发的开源项目&#xff0c;旨在提供一个功能强大的基于Docker的本地托管PDF操作工具Stirling PDF。 项目介绍 Stirling-PDF是一个全面的PDF工具箱&#xff0c;适用于个人和企业用户&#xff0c;尤其对于那些重视数据…

华杉研发九学习日记17 正则表达式 异常

华杉研发九学习日记17 一&#xff0c;正则表达式 ^ $ 作用&#xff1a; 测试字符串内的模式(匹配) 例如&#xff0c;可以测试输入字符串&#xff0c;以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证. 替换文本&#xff08;替换》 可以使用正则表达式来…

谷粒商城实战笔记-59-商品服务-API-品牌管理-使用逆向工程的前后端代码

文章目录 一&#xff0c; 使用逆向工程生成的代码二&#xff0c;生成品牌管理菜单三&#xff0c;几个小问题 在本次的技术实践中&#xff0c;我们利用逆向工程的方法成功地为后台管理系统增加了品牌管理功能。这种开发方式不仅能快速地构建起功能模块&#xff0c;还能在一定程度…

Elasticsearch 7.x入门学习-Java API操作

1 创建项目 在idea开发工具中创建Maven项目 修改 pom 文件&#xff0c;增加 Maven 依赖关系 <dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</versi…