无锡企业网站seo/时事政治2023最新热点事件
ʕ • ᴥ • ʔ
づ♡ど
🎉 欢迎点赞支持🎉
个人主页:励志不掉头发的内向程序员;
专栏主页:C语言基础;
文章目录
前言
一、二维数组的创建
1.1 二维数组的概念
1.2二维数组的创建
二、二维数组的初始化
2.1 不完全初始化
2.2 完全初始化
2.3 按照行初始化
三、二维数组的使用
3.1二维数组的下标
3.1二维数组的输入和输出
四、二维数组的内存存储
五、C99中的变长数组
总结
前言
小伙伴们好啊,我们上一章节讲述了一维数组的各种基本语法,明白了一维数组的创建及输入输出以及销毁等,不知道大家有没有想过,数组难道只有一维嘛,有没有更高维,它们又是什么样子的呢,高维数组又有什么作用,那就让我们一起来看看吧。
一、二维数组的创建
1.1 二维数组的概念
我们之前学到了一维数组,数组里面储存的元素是我们计算机的内置类型,而我们把一维数组整体当作一个数组元素,很多个这样的数组的组合就是二维数组,如果我们把二维数组当作一个数组元素同理可得出三维数组,二维数组以上统称为多维数组。
1.2二维数组的创建
我们来看看二维数组的创建方式
type arr_name[常量值1][常量值2];
例如:
int arr[3][5];
char ch[4][3];
如上我们可以总结出以下几点:
1.数据类型,如 int arr[3][5] 的数据类型就是int型,也就是说它里面的各个元素都是int型。
2.我们可以知道arr后面带了两个常量值,这其中的常量值1表示的是有几行,而常量值2则是表示有几列,如我们上面的那张图片就是3行5列的二维数组,所以就是arr[3][5]。
3. 像arr呀,ch呀,都是数组名,是自己所赋予的最好是有意义的名字。
二、二维数组的初始化
我们在创建变量的时候进行赋值叫做初始化,二维数组的初始化和一维数组是相同的,都是用大括号进行初始化。
2.1 不完全初始化
和一维数组类似,但是又不完全相同,二维数组的初始化如果不完全的话,计算机也是会默认没有初始化的部分是为0的,我们可以来观察一下。
int main()
{int arr[3][5] = { 1, 2, 3, 4, 5 };return 0;
}
这是一个3行5列的二维数组,而且数组类型是int型。
我们可以在监视的地方看到,arr这个二维数组是由三个一维数组组成的,而我们初始化先对二维数组里的第一个一维数组进行初始化,等一维数组的数据满了以后才会对第二个数组进行初始化,如果没有初始化的地方,计算机是默认为0的。那有没有什么办法能给我们二维数组中的第一个一维数组没满的情况下也能在第二个一维数组里输入元素呢,当然可以,我们可以在大括号里面再加一个大括号来区分二维数组和一维数组。
int main()
{int arr[3][5] = { {1, 2, 3}, {2, 3, 4}, {3, 4, 5} };return 0;
}
如图所示,我们可以在大括号里面再加一个大括号用来表示二维数组的元素,也就是一维数组。
我们可以看到,它们每一个一维数组都不完全初始化了,这就是二维数组的不完全初始化。
2.2 完全初始化
二维数组的完全初始化和一维数组差不多,就是把每个元素都初始化,但是我们可以用大括号来区分不同二维数组的元素。
int main()
{int arr[3][5] = { {1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}, {3, 4, 5, 6, 7} };return 0;
}
2.3 按照行初始化
按行初始化本质上就是用大括号把二维数组的各个元素,也就是一维数组区分开来,然后再进行初始化,因为一维数组的个数即是行数。
另:我们知道一维数组可以省略数组名后面[ ]里的常量值,可以由计算机来计算常量值应该是多少,二维数组也是同理的,但是它不能两个[ ]里的都省略,它只能省略前面的内容而不能省略后面的内容,也就是它只能省略行而不能省略列,如果都省略掉行,计算机可以通过计算来知道应该有几行,但是如果省略掉列,那计算机就没办法知道一个元素内该赋予多少个值。所以只能省略行而不能省略列。
三、二维数组的使用
我们明白了二维数组的创建方式,那么二维数组该如何使用呢,它的使用方式和一维数组一样吗,我们接下来看看。
3.1二维数组的下标
我们都知道,二维数组是分为行和列的,数组名后面的第一个[]表示的就是行数,第二个[]表示的就是列数,所以说它把里面的每个元素都按行按列给了下表。
我们创建一个这样的三行五列的二维数组,它本质上是这个样子的。
它和一维数组相同,下标都是从0开始到n-1的,像元素1的下标就是0,0,我们想取1出来就让计算机输入arr[0][0]即可。
如果想取这个4,那就是arr[1][2],是先行再列,不是先列再行。
3.1二维数组的输入和输出
我们知道了一维数组的输入和输出主要是运用循环的方式实现的,那二维数组呢?二维数组不就是在一维数组的基础上增加了几行嘛,我们依然可以用循环来实现二维数组。
我们可以使用循环的嵌套,一个循环来控制二维数组的行数,一个循环来控制二维数组的列数,就如图所示,
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]);}}//当j遍历了一边后i++,这样就实现了遍历二维数组,我们在//它每个元素进行输入,这就是二维数组的输入。//输出for (int i = 0; i < 3; i++){for (int j = 0; j < 5; j++){printf("%d ", arr[i][j]);}printf("\n");}return 0;
}
这样我们就实现了二维数组的输入和输出。
四、二维数组的内存存储
我们在表现二维数组的时候是张这个样子的,
但是二维数组在内存存储的过程中是什么样子的呢,是不是连续的呢,我们可以来看一下,具体的办法和一维数组相同。我们来看一下它们的地址。
int main()
{int arr[3][5] = { 0 };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;
}
我们可以看到它们不但每个一维数组内连续的,而且数组之间的内存也是连续的,它在内存中的样子应该是这个样子的,
元素与元素之间在内存上是连续的,和一维数组是一样的。
五、C99中的变长数组
在C99标准前,C语言的在创建时只能用常量或者常量表达式,如
int arr[5] = { 0, 1, 2, 3, 4 };
int arr[2 + 3] = { 0, 1, 2, 3, 4 };
int arr[ ]= { 0, 1, 2, 3, 4 };
这样的语法限制让我们在创建数组的时候就很不灵活,如果创建大了就浪费空间,如果创建小了那就不够用,所以在C99中就引入了一个变长数组的特性,允许我们可以使用变量来指定数组大小。变长数组只是说我们可以用变量来改变数组,而不是说我们可以让数组任意变长变短。
int main()
{n = a + b;int arr[n] = { 0 };return 0;
}
遗憾的是vs2022虽然引用了很多C99的语法,但是变长数组却没有,所以这里就当了解一下吧。
总结
以上就是数组的全部内容,其实数组的本质是指针,这个我们在指针时再讲,我们接下来就开始来聊聊函数啦,感谢大家的观看,如果有错误请指出,我一定马上更正,谢谢大家。
相关文章:

C语言基础——数组(2)
ʕ • ᴥ • ʔ づ♡ど 🎉 欢迎点赞支持🎉 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言基础; 文章目录 前言 一、二维数组的创建 1.1 二维数组的概念 1.2二维数组的创建 二、二维数组…...

封装PHP用于发送GET和POST请求的公共方法
封装了ThinkPHP用于发送GET和POST请求的公共方法。这个方法可以放在你的公共函数文件中,或者创建一个独立的类来管理这些请求。 <?php namespace app\common\utils;use think\facade\Log; use think\exception\HttpException;class HttpRequest {/*** 发送GET请…...

MongoDB~基础知识记录
为何要学Mongodb 工作以来,使用最多、了解最多的是MySQL。但技术的发展一定是依据痛点来的,就比如我遇到的痛点,一个业务、一个平台能力、存储的一个对象,随着产品和运营的需求,不断的进行变更,每一次的变…...
DSP28335模块配置模板系列——ADC配置模板
一、配置步骤 1.使能并配置高速时钟HSPCLK、ADC校验 EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK 1; EDIS;EALLOW;SysCtrlRegs.HISPCP.all ADC_MODCLK; // HSPCLK SYSCLKOUT/(2*ADC_MODCLK)ADC_cal();EDIS; 这里ADC_MODCLK3,所以HSPCLK时钟为150/625Mhz 2.配…...

字符串转换为字节数组、16进制转换为base64、base64转换为字符串数组、base64转换为16进制(微信小程序)
1、字符串转换为字节数组 // 字符串转为字节数组 function stringToByteArray(str) {var array new Uint8Array(str.length);for (var i 0; i < str.length; i) {array[i] str.charCodeAt(i);}return array; } 2、16进制转换为base64 // 16进制转换为base64 function H…...

c++中, 直接写浮点数, 是float 还是 double?
如果直接一个浮点数, 那么他默认是float还是double呢? 测试用例 #include <iostream> using namespace std;int main() {auto x 0.2;float f 0.2;double d 0.2;cout << "x Size : " << sizeof(x) << " bytes" << endl…...

C++核心编程友元的应用
文章目录 1.友元1.什么是友元2.全局函数做友元2.类做友元3.成员函数做友元 1.友元 1.什么是友元 在C中,友元(friend)是一种允许一个类或函数访问另一个类的非公有(private 或 protected)成员的机制。这种机制打破了类…...

C#,JavaScript实现浮点数格式化自动保留合适的小数位数
目标 由于浮点数有漂移问题,转成字符串时 3.6 有可能得到 3.6000000000001,总之很长的一串,通常需要截取,但按照固定长度截取不一定能使用各种情况,如果能根据数值大小保留有效位数就好了。 C#实现 我们可以在基础库里…...

Android基础-工程目录结构说明
Android工程的项目目录结构是开发Android应用时的基础,它组织和存储了应用的所有源代码、资源和配置文件。了解并熟悉这个目录结构对于提高开发效率和代码管理至关重要。下面将详细阐述Android工程的项目目录结构。 1. 工程根目录 Android工程的根目录通常包含多个…...

浅谈提示词发展现状,Prompt 自动优化是未来。
#封面手绘于本科期间,当年在知乎上写的第一篇关于 AI 的文章就用的这个封面,聊表纪念。 这次我们来聊聊 Prompt. 本来想取一个类似“提示词不存在了…”,或是“再见,Prompt 课程…”的标题,但最近很多大佬的谬赞让我感…...

揭秘智能测径仪省钱之道!每年能为每条产线省上百万!
在当今竞争激烈的市场环境下,企业们都在不断寻求提高生产效率、降低成本的方法。而智能测径仪的出现,为圆形钢材、螺纹钢等生产企业实现这一目标提供了有力的支持。 智能测径仪被广泛应用于高线、铸管、圆钢、螺纹钢、钢筋等的轧制生产线中,进…...

echaerts图例自动滚动并隐藏翻页按钮
效果图 代码 legend: {itemHeight: 14,itemWidth: 14,height: "300", //决定显示多少个// 通过 CSS 完全隐藏翻页按钮pageButtonItemGap: 0,pageButtonPosition: end,pageIconColor: transparent, // 隐藏翻页按钮pageIconInactiveColor: transparent, // 隐藏翻页按…...

OpenCV的小部件最基本范例
OpenCV也有与PYQT类似的小部件,例如滑块slider。OpenCV可以用与PYQT类似的“信号与槽”方法,也可以在函数中直接查询小部件的值。 import cv2 import numpy as npcv2.namedWindow(Show1) image np.zeros((100, 400, 3), np.uint8) # 创建一个空白内容…...

内置类型知多少?
内置类型(也称为基本类型或原生类型)是C/C本身定义的数据类型,它们直接由编译器支持,不需要用户自定义。 内置类型主要包括以下几类: 1.算术类型: (1)整型:int、short、long、lon…...

【C++题解】1090 - 同因查找
问题:1090 - 同因查找 类型:for循环、简单循环 题目描述: 求出 10 至 1000 之内能同时被2、3、7 整除的数,并输出。 每行一个。 输入: 无。 输出: 按要求输出满足条件的数,每行 1 个。 完…...

uni微信小程序editor富文本组件如何插入图片
需求 在editor中插入图片,并对图片进行编辑,简略看一下组件的属性,官网editor 组件 | uni-app官网 解决方案 首先要使用到ready这个属性,然后官网有给代码粘过来,简单解释一下这段代码的意思(作用是在不同…...

LabVIEW调用国产硬件DLL的稳定性问题及解决方案
在LabVIEW中调用国内公司提供的硬件DLL时,尽管可以运行,但常出现不稳定和bug问题,且厂家临时修改的版本未经长期测试。为确保稳定性和质量,需要制定系统化的测试和反馈机制、建立严格的版本控制、与厂家协作优化、并进行深入的自测…...

基础篇01——SQL的基本语法和分类
MySQL数据库安装与基本使用 安装教程参见:通过zip安装MySQL 通过命令行启动和停止MySQL服务命令 前提:安装MySQL成功之后 启动服务:net start mysql 停止服务:net stop mysql 通过命令行连接mysql 可以通过mysql的客户端命令行…...

HOW - 面试技巧系列 - 全英文面试
自我介绍 “can you tell me a little bit about yourself?” “please introduce yourself.” 工作经验 “can you describe your most recent job experience?” “how does your experience make you a good fit for this position?” 职业规划 “what are your l…...

【人工智能】第六部分:ChatGPT的进一步发展和研究方向
人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…...

新能源管理系统主要包括哪些方面的功能?
随着全球对可持续发展和环境保护的日益重视,新能源管理系统已成为现代能源领域的核心组成部分。这一系统不仅涉及对新能源的收集、存储和管理,还包括对整个能源网络进行高效、智能的监控和控制。以下是新能源管理系统主要包含的几方面功能: 一…...

python如何快速的判断一个key在json的第几层呢,并修改其value值
python如何快速的判断一个key在json的第几层呢,并修改其value值 def find_and_modify_key(json_obj, target_key, new_value, current_level1):# 检查当前层是否包含目标keyif target_key in json_obj:print(f"找到 {target_key} 在第 {current_level} 层。&q…...

Python基础用语:揭示编程世界的底层逻辑与无限可能
Python基础用语:揭示编程世界的底层逻辑与无限可能 Python,这门强大的编程语言,如同一位神秘的导师,引领我们走进编程的奇妙世界。掌握Python的基础用语,不仅意味着我们能够驾驭这门语言,更意味着我们能够…...

react 中使用 swiper
最近项目中需要用到轮播图,我立马想起了 swiper ,那么本文就来带大家体验一下如何在 React 中使用这个插件,使用的是 函数组 hooks 的形式。 需求非常简单,就是一个可以自动播放、点击切换的轮播图(跑马灯࿰…...

2024年搭建知识库系统5大工具推荐
现如今,越来越多的企业开始了解并搭建知识库系统,想要带动企业员工的工作效率以提高企业运营效率。各种各样搭建知识库系统的工具应运而生,而如何在众多工具中,选择出最适合独特的企业产品的一个工具,成为企业亟待解决…...

Golang内存分配分三种Golang内存分配分三种类型
Golang内存分配分三种类型 线程缓存(Thread Cache) 拟人化解释:线程缓存就像是每个邮局员工的私人储物柜。每个员工都有自己的储物柜,用来暂时存放需要处理的小信件和包裹。当有新的信件或包裹需要处理时,员工会先看看…...

Marin说PCB之如何在主板上补偿链路中的走线的等长误差?
一场雨把我困在这里,你冷漠地看我没有穿雨衣淋成落汤鸡。今天刚刚出门时候看天气预报没有雨,于是我就没有带雨衣骑电动车去公司了,谁知道回来的路上被淋成狗了。天气预报就像是女人的脾气那样,不能完全相信的。 好了,我…...

企业在现代市场中的战略:通过数据可视化提升财务决策
新时代,财务规划团队不仅仅是企业内部的一个部门,更是帮助企业做出明智决策和设定战略目标的中坚力量。在当今瞬息万变的商业环境中,财务专业人士需要具备应对挑战并引导企业走向成功的角色职能。企业领导者时常面临着数据压力,需…...

printf(“不喝酒就没得朋友可是只要偶一喝酒就喝倒一代朋友人生真的很矛盾“);
/*无线通讯语言模块测试PAST 2019 12 28 L298 CODE1871**/ #include <REG52.H> #include <intrins.H> #include "stdio.h" #define uint unsigned int #defi…...

JAVA小案例-分别计算100以内奇数和偶数的和
JAVA小案例-分别计算100以内奇数和偶数的和 没啥可说的,就是for循环加if分支,也可以用while写。 代码如下: public class Jiouhe {/*** 分别计算100以内奇数和偶数的和* param args*/public static void main(String[] args){int sum10;in…...