【C语言】二维数组(详解)

 

目录  

  1.  二维数组的创建  

  1.1  二维数组的概念  

  1.2  二维数组的创建  

  2.  二维数组的初始化  

  2.1  不完全初始化  

  2.2  完全初始化   

  2.3  按照行初始化  

  2.4  初始化时能省略行,但不能省略列  

  3.  二维数组的使用  

  3.1  二维数组下标  

  3.2  二维数组的输入与输出  

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

  5.  C99中的变长数组  

  6.  数组练习  

  ——————————宫崎骏动漫里的夏天—————————


 正文开始—— 

前言

  前面我们深入学习了一维数组的相关知识,现在我们开始二维数组的学习之旅吧!  

  1.  二维数组的创建  

  1.1  二维数组的概念  

前面学习的数组被称为一维数组,数组的元素都是内置类型的,如果我们把一维数组作为数组的元素,这就是二维数组,二维数组作为数组元素的数组被称为三维数组,把二维数组以上的数组统称为多维数组

  1.2  二维数组的创建  

定义二维数组的语法如下:

1   type  arr_name [常量值1] [常量值2];

2   

3   例如:

4            int  arr [3][6];

5            double  data [5][6];

  • 3表示数组有3行 
  • 6表示数组有6列
  • int 表示数组中每个元素都是 int 类型
  • arr 是数组名,可以根据自己的需要指定名字

  2.  二维数组的初始化  

在创建变量或数组的时候,给定一些初始值,被称为 初始化

二维数组的初始化与一维数组一样,也是用大括号初始化的。

  2.1  不完全初始化  

1   int  arr1 [3][4] = {1,2};

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

arr1数组

  2.2  完全初始化   

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

  2.3  按照行初始化  

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

  2.4  初始化时能省略行,但不能省略列  

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

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

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

  3.  二维数组的使用  

  3.1  二维数组下标  

二维数组的访问也是使用下标的形式,二维数组是有行和列的,只要锁定了行和列就能唯一锁定数组中的一个元素。

C语言规定,二维数组的行和列都是从0开始的。如下所示:

1   int  arr[3][5]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};

arr数组

第一列表示行号,第一行表示列数,第二行第四列,锁定15。 

  3.2  二维数组的输入与输出  

我们已经知道了如何访问二维数组的单个元素,那我们如何访问整个二维数组呢?

我们只要有规律的产生行和列的数字就可以了,以上面 arr 数组为例,行的范围是0~2,列的范围是0~4,所以我们可以借助循环生成所有的下标。

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

像一维数组一样,我们想研究二维数组在内存中的存储方式,我们也可以打印出数组所有元素的地址。

如下:

从输出结果看,每一行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处( arr[0][4] 和 arr[1][0] )的两个元素之间也是相差4个字节,所以 二维数组中的每个元素都是连续存放的。

  5.  C99中的变长数组  

在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式,或者如果我们初始化数据的话,可以省略数组大小。

如:

1   int  arr1 [10];

2   int  arr2 [3+5];

3   int  arr3 [] = { 1, 2, 3 };

这样的语法限制,让我们创建数组的时候不够灵活,有时候数组大了浪费空间,数组小了又不够用。

C99中给一个变长数组的新特性,允许我们可以使用变量指定数组大小。如:

1   int n = 0;

2   int  arr[n];

上面的代码中,数组 arr 就是变长数组,因为它的长度取决于变量 n 的值,编译器没法实现确定,只能运行时才能知道 n 是多少。

【重点】

变长数组的根本特征,就是数组的长度只有运行时才能确定,所以变长数组不能初始化。它的长度是程序员不必在开发时,随意为数组指定一个估计的长度,程序可以在运行时为数组分配精确的长度。有一个比较迷惑的点,变长数组的意思是数组的大小可以使用变量来指定的,在程序运行时,根据变量的大小来指定数组的元素个数,而不是说数组的大小是可变的。数组的大小一旦确定就不能再改变了。 

遗憾的是,在VS2022上,虽然支持大部分C99的语法,但是不支持C99中的变长数组,没法测试。

  6.  数组练习  

题目:多个字符从两端移动,向中间汇聚

二维数组的学习就结束了,下来我们要好好练练习题才能对二维数组的掌握及其运用更加熟练。


完——

  ——————————宫崎骏动漫里的夏天—————————

茫_李润祺_高音质在线试听_茫歌词|歌曲下载_酷狗音乐酷狗音乐为您提供由李润祺演唱的高清音质无损茫mp3在线听,听茫,只来酷狗音乐!icon-default.png?t=N7T8https://t1.kugou.com/song.html?id=5bDc5edCOV2


期待我们下一次的共同学习!

再见——

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

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

相关文章

【2024】kafka streams结合案例分析进行实际项目开发使用(3)

💻目录 一、前沿介绍二、代码实现1、依赖2、实体类2.1、Transaction2.2、 TransactionKey2.3、TransactionPattern2.4、CustomerReward 3、序列化工具类3.1、序列化3.2、反序列化3.3、Serde仓库 4、具体streams实现5、其他测试使用5.1、生产者5.2、日志文件 6、创建…

背景渐变动画登录页

b站视频演示效果: 效果图: 完整代码: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>背景…

MySQL全解(基础)-(MySQL的安装与配置,数据库基础操作(CRUD,聚合,约束,联合查询),索引,事务)

MySQL安装与配置 1.数据库介绍 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便数据库存储介质&#xff1a; 磁盘 内存 为了…

天翼云8080、80端口用不了的问题

天翼云8080、80端口用不了的问题 前言&#xff1a;前段时间天翼云搞了活动&#xff0c;原来公司用的华为云老板说太贵了也快到期了&#xff0c;就换了天翼云的服务器。 排查&#xff1a; 安全组开放 80 8080 防火墙查看 没有问题 nginx nacos dcoker等停了 查看监听端口 发现…

web标准与浏览器前缀

目录 W3Cweb标准&#xff1a;是敌还是友人员结构标准制订的流程 css3&#xff0c;css4的传说css3 浏览器前缀&#xff1a;失败的产物关于渐进增强和优雅降级 W3C 万维网最初是由欧洲核子研究组织的一个项目发展起来的&#xff0c;在那里蒂姆伯纳斯-李开发出第一个万维网的雏形…

超声波清洗机有用吗?四大主流超声波清洗机终极PK大测评!

超声波清洗机是通过产生的超声波对于液体不断动作的一个过程&#xff0c;水分子在超声波的震动下互相碰撞挤压&#xff0c;从而发生空化作用对物体表面的污迹进行乳化剥离&#xff01;相比手洗的方式&#xff0c;超声波能够深入夹缝清洁&#xff0c;清洁程度非常高&#xff01;…

充电学习—8、Type-C TCPC TCPCI

TCPC是usb Type-C port controller&#xff1b; 通用串行总线C型端口控制器 TCPCI是tcpc控制器接口规范&#xff1b; TCPC是个功能块&#xff0c;其中含有VBUS和VCONN的电源控制功能&#xff0c;CC信号的处理 逻辑&#xff0c;PD应用中的BMC物理层和协议层&#xff08;PD信息…

FlowUs:打造沉浸式协作体验感受

直观的用户体验 从我个人的角度来看&#xff0c;FlowUs的界面设计非常符合现代审美&#xff0c;简洁而不失功能性。每次打开FlowUs&#xff0c;我都能迅速找到我需要的功能&#xff0c;这大大提升了我的工作效率。 实时协作的流畅性 在FlowUs中&#xff0c;我最喜欢的功能之一就…

13.4 内存管理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

c++参考std::string自己设计类hstring

目录 一、前言 二、设计需求 三、设计思想 1.功能一 1.功能二 四、设计过程 1.类hstring搭建 2. 实现有参构造函数 3. 实现副本构造函数 4.完整代码 五、结束语 一、前言 在c中有很多的库&#xff0c;但是在有些时候呢&#xff0c;我们一定要学会自己去设计库&#…

抖音素材网站平台有哪些?素材下载网站库分享

在这个视觉信息充斥的时代&#xff0c;抖音已经成为众多自媒体人展示才华的舞台。要在众多创作者中脱颖而出&#xff0c;不仅需要独特的创意&#xff0c;还需要优质的素材来支持你的内容制作。今天&#xff0c;我将介绍几个为抖音视频提供高品质素材的网站&#xff0c;包括国内…

Python构造TCP三次握手、传输数据、四次挥手pcap数据包并打乱顺序

Python构造数据包&#xff0c;包含&#xff1a; TCP三次握手、 传输数据、 四次挥手 实现 随机乱序TCP数据包 from scapy.all import * from scapy.all import Ether, IP, TCP, UDP, wrpcap from abc import ABC, abstractmethod import random import dpkt from scapy.all…

训练营第四十二天| 583. 两个字符串的删除操作72. 编辑距离647. 回文子串516.最长回文子序列

583. 两个字符串的删除操作 力扣题目链接(opens new window) 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#xff0c;每步可以删除任意一个字符串中的一个字符。 示例&#xff1a; 输入: "sea", "eat"输出: …

QT6不自动生成pro文件

安装了QT的新版本结果他不自动生成pro文件了导致下次打开很复杂 记得在创建时选择qmake&#xff0c;因为新版默认cmake

宝塔软件默认安装位置

自带的JDK /usr/local/btjdk/jdk8Tomcat 各个版本都在bttomcat这个文件夹下面&#xff0c;用版本区分。tomcat_bak8是备份文件 /usr/local/bttomcat/tomcat8nginx /www/server/nginxnginx配置文件存放目录 /www/server/panel/vhost/nginxredis /www/server/redismysql /…

财讯杂志财讯杂志社财讯编辑部2024年第6期目录查询

财税研究 “互联网税务”模式在企业税务管理中的应用 陈飞; 1-3 国有企业税务稽查的问题与对策研究 梁涵瑜; 4-6 税务师事务所执业质量内部控制优化路径及风险防范 万晓玲; 7-9《财讯》投稿&#xff1a;cnqikantg126.com 基于全过程的新能源电力投资企业税务筹…

宝塔面板使用技巧(pure-FTP)上传文件和文件夹默认权限644的修改

前言 科技在进步各种各样的开源软件和库让我们应接不暇&#xff0c;我估计现在所有做php开发的人员都知道宝塔面板&#xff0c;我就经常用&#xff0c;但是不知道大家出现过一个问题不就是在我们开发过程中需要实时的给服务器上传我们开发的文件那么就涉及到了宝塔自带的pure-F…

BC-Linux 8.6最小化安装的服务器启用GNOME图形化界面

本文记录了BC-Linux 8.6最小化安装的服务器如何启用GNOME图形化界面的过程。 一、服务器环境 1、系统版本 [rootlocalhost ~]# cat /etc/os-release NAME"BigCloud Enterprise Linux" VERSION"8.6 (Core)" ID"bclinux" ID_LIKE"rhel fe…

央国企财务专家的“专家课”——中国总会计师协会联合实在智能举办RPA专项培训

近日&#xff0c;中国总会计师协会正式举办了为期五天的「财务数字化思维与实用IT技能提升」专项培训&#xff0c;吸引了来自中铁十五局集团有限公司、中国航空工业规划设计院、中核核电运行管理有限公司、中国北方车辆有限公司、一汽物流有限公司等国企、事业单位及民营企业共…

eclipse宝刀未老

Theia 是一个高度可定制的、开源的、基于 Web 的集成开发环境&#xff08;IDE&#xff09;框架。它由 Eclipse Foundation 主导&#xff0c;旨在为云和本地环境提供现代化的、全功能的 IDE 解决方案。Theia 的核心目标是提供一个灵活的平台&#xff0c;开发者可以根据自己的需求…