【C语言】4.C语言数组(2)

文章目录

  • 6. 二维数组的创建
    • 6.1 ⼆维数组的概念
    • 6.2 ⼆维数组的创建
  • 7. 二维数组的初始化
    • 7.1 不完全初始化
    • 7.2 完全初始化
    • 7.3 按照⾏初始化
    • 7.4 初始化时省略⾏,但是不能省略列
  • 8. 二维数组的使用
    • 8.1 ⼆维数组的下标
    • 8.2 ⼆维数组的输⼊和输出
  • 9. 二维数组在内存中的存储
  • 10. C99中的变长数组
  • 11. 数组练习


6. 二维数组的创建

6.1 ⼆维数组的概念

如果我们把一维数组做为数组的元素,这时候就是二维数组。二维数组以上的数组统称为多维数组。

在这里插入图片描述

也就是说可以理解成二维数组就是由多行一维数组组成的。


6.2 ⼆维数组的创建

二维数组语法:

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

举个例子:

int arr[3][5];

3表示数组有3行

5表示每一行有5个元素,也可以理解成5列

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,6,7,8,9,10,11,12,13,14,15};

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 ⼆维数组的下标

二维数组是有行和列的,只要锁定了行和列就能唯一锁定数组中的元素.

在这里插入图片描述

第一行蓝色的数字表示列号,第一列蓝色数字表示行号。

都是从0开始的。

arr[0][0]=1

arr[1][2]=8


8.2 ⼆维数组的输⼊和输出

如何访问整个二维数组?

#include <stdio.h>
int main()
{int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };int i = 0;for (i = 0; i < 3; i++) //产生行号{int j = 0;for (j = 0; j < 5; j++) //产生列号{printf("%d ", arr[i][j]);}printf("\n");}return 0;
}

打印:

在这里插入图片描述

如果想改变整个数组的元素,并且打印的话就这样:

#include <stdio.h>
int main()
{int arr[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};int i = 0;for(i=0; i<3; i++) //产生行号{int j = 0;for(j=0; j<5; j++) //产生列号{scanf("%d", &arr[i][j]); }}for(i=0; i<3; i++) //产生行号{int j = 0;for(j=0; j<5; j++) //产生列号{printf("%d ", arr[i][j]); }printf("\n");}return 0;
}

打印:

在这里插入图片描述


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

我们先打印出数组所有元素的地址:

#include <stdio.h>
int main()
{int arr[3][5] = { 0 };int i = 0;int j = 0;for (i = 0; i < 3; i++){for (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. C99中的变长数组

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

int arr1[10];
int arr2[3+5];
int arr3[] = {1,2,3};

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

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

int n = a+b;
int arr[n];

这个例子里面,数组 arr 就是变长数组,因为它的长度取决于变量 n 的值,编译器没法事先确定,只有运行时才能知道 n 是多少。

变长数组的数组长度只有运行时才能确定,所以变长数组不能初始化。

注意:有些编译器不支持C99语法,所以使用变长数组有时会报错。


11. 数组练习

编写代码,演示多个字符从两端移动,向中间汇聚:

#include <stdio.h>
int main()
{char arr1[] = "welcome to bit...";char arr2[] = "#################";int left = 0;int right = strlen(arr1)-1;//得到数组元素个数减一,用作数组最右边一个元素printf("%s\n", arr2);while(left<=right){Sleep(1000);//延时1秒,这个函数只有Windows电脑可以用//这个延时函数可以让下面的打印慢慢出来,比较好玩arr2[left] = arr1[left];arr2[right] = arr1[right];//将arr1中的字符赋值给arr2中的对应位置。这样arr2中的井号被arr1中的字符替换。left++;right--;//left++;和right--;分别将left和right向中间移动,left 向右移动,right向左移动。printf("%s\n", arr2);}return 0;
}

打印:

在这里插入图片描述

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

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

相关文章

利用一段代码轻松绕过PHP授权系统

利用一段代码轻松绕过PHP授权系统 第一步&#xff1a;首先你需要改名全局文件 比如说全局文件 common.php&#xff0c;那么 你将他改为core.php 第二步&#xff1a;创建文件 创建一个文件&#xff0c;和改名前的全局文件名称一样&#xff0c;然后把以下代码复制进去就OK了 …

【MySQL01】【 Explain 命令详解】

文章目录 一、前言二、Explain 概览三、Explain 详解1. id2. select_type3. table4. type5. possible_keys6. key7. key_len8. ref9. rows10. filtered11. extra 列 四、补充1. EXPLAIN 扩展1.1 Extend EXPLAIN1.2 JSON 格式的执行计划 2. Intersection、Union、Sort-Union 索引…

使用C++实时读取串口数据(window使用已编译LibModbus库并用QT实现一个实时读取串口数据)

先看这篇文章&#xff0c;写得很详细: QT应用篇 四、window编译LibModbus库并用QT编写一个Modbus主机 手把手教学 编译好的LibModbus库可以在上面文章里下载&#xff0c;也可以在我的链接里下载&#xff1a; 为了在Qt Creator中创建新项目并嵌入上述C代码&#xff0c;请执行以…

C++进阶:红黑树介绍及模拟实现(图示详解过程)

C进阶&#xff1a;红黑树介绍及模拟实现 上次介绍了AVL树&#xff1a;C进阶&#xff1a;AVL树详解及模拟实现&#xff08;图示讲解旋转过程&#xff09; 今天就来紧接着来红黑树啦!!! 文章目录 1.红黑树介绍约束规则 2.项目文件规划3.整体框架&#xff08;节点和Tree&#xf…

whisper报错:hp, ht, pid, tid = _winapi.CreateProcess [WinError 2] 系统找不到指定的文件。

in _execute_child hp&#xff0c; ht&#xff0c; pid&#xff0c; tid _winapi.CreateProcess&#xff08;executable&#xff0c; args&#xff0c; FileNotFoundError&#xff1a; [WinError 2] 系统找不到指定的文件。 原因&#xff1a; 没装ffmpeg 或者 ffmpeg没添加到…

k8s pod就绪探针

Pod 可能需要时间来加载配置或数据&#xff0c;或者可能需要执行预热过程以防止第一个用户请求时间太长影响了用户体验。在这种情况下&#xff0c;不希望该 pod 立即开始接收请求&#xff0c;尤其是在运行的实例可以正确快速地处理请求的情况下。不要将请求转发到正在启动的 po…

YOLOv5独家改进:backbone改进 | 微软新作StarNet:超强轻量级Backbone | CVPR 2024

💡💡💡创新点:star operation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力,这就是StarNet的核心创新,在紧凑的网络结构和较低的能耗下展示了令人印象深刻的性能和低延迟 💡💡💡如何跟YOLOv5结合:替代YOLOv5的backbone 收录 YOL…

电容笔记汇总

电容 一、电容理论基础 1、电容的本质 两个相互靠近的导体&#xff0c;中间夹一层不导电的绝缘介质&#xff0c;这就构成了电容器。当电容器的两个极板之间加上电压时&#xff0c;电容器就会储存电荷。 两个相互靠近的金属板中间夹一层绝缘介质组成的器件&#xff0c;当两端…

豆浆机缺水检测功能如何实现的

豆浆机缺水检测功能的实现是通过光学液位传感器来完成的。这种传感器具有多种优势&#xff0c;如内部所有元器件经过树脂胶封处理&#xff0c;没有任何机械活动部件&#xff0c;免调试、免检验、免维护等特点。它采用了光电液位传感器内置的光学电子元件&#xff0c;体积小、功…

Docker常用镜像安装

1. mysql 1.1 安装 获取镜像 docker pull mysql:8.0.30创建文件挂载目录 创建容器并运行 docker run -p 3306:3306 --name mysql8 \ -v /home/docker/mysql8/log:/var/log/mysql \ -v /home/docker/mysql8/data:/var/lib/mysql \ -v /home/docker/mysql8/mysql-files:/va…

保研机试之【设备驱动程序】

B选项&#xff1a; 综上&#xff0c;我认为这道题选择D~

一些近来对内网攻防的思考

我知道我最近托更托了很久了&#xff0c;其实也不是小编懒啊 这小编也是一直在写&#xff0c;但是遇到的问题比较多&#xff08;我太菜了&#xff09;&#xff0c;所以一直拖着。 但是总不能不更吧 那就讲一下进来的一些内网攻防的思考吧 1.CrossC2上线Linux到CS(成功) …

用友网络的危与机:2023年亏损约10亿元,王文京面临严肃拷问

“企业在新的产业浪潮来临时&#xff0c;应该主动推进新阶段的产品和业务创新&#xff0c;这样才能够在新的浪潮成为主流的时候&#xff0c;走到行业前面&#xff0c;否则就会从产业发展的潮流中掉下来”。用友网络创始人王文京&#xff0c;曾用“冲浪理论”形容一家企业成功的…

Steam喜加一,限时免费领取《Machinika Museum》

《Machinika Museum》限时免费领取啦&#xff01;这是一款烧脑解谜游戏&#xff0c;让你挖掘神秘外星装置的秘密。在这个非常特别的异星装置博物馆里&#xff0c;你将扮演一名研究员&#xff0c;负责解开各种机械谜题&#xff0c;探索背后的故事。 在这个未来世界&#xff0c;外…

MLP的代替:KAN

受柯尔莫哥洛夫-阿诺德表示定理的启发&#xff0c;作者提出柯尔莫哥洛夫-阿诺德网络&#xff08;KAN&#xff09;作为多层感知器&#xff08;MLP&#xff09;有前途的替代品。MLP 在节点&#xff08;“神经元”&#xff09;上具有固定的激活函数&#xff0c;而 KAN 在边&#x…

自动化中遇到的问题归纳总结

1、动态元素定位不到 解决方法&#xff1a;尽量使用固定元素定位&#xff0c;如没有固定元素&#xff0c;则采用绝对路径进行定位&#xff0c;因为元素路径是唯一且不变的 2、自动化脚本执行速度较慢 尽量使用css方法定位元素&#xff0c;使用等待时&#xff0c;少用sleep方…

[笔记] srlua库编译

文章目录 前言一、环境二、编译过程2.1 gcc安装2.2 编译lua2.3 编译srlua库 三、测试srlua库参考总结 前言 一、环境 centos7.9 gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) lua5.1源码 srlua 源码 二、编译过程 2.1 gcc安装 yum install gcc这里gcc安装过程和环…

苹果电脑卡顿反应慢怎么办 苹果电脑卡顿严重解决方法 mac电脑太卡了怎么办

作为Mac用户&#xff0c;你是否正在经历或者曾经遭遇过电脑卡顿、反应慢的困扰&#xff1f;这可能是由于多种原因导致的&#xff0c;包括自启动程序过多、系统与应用未及时更新、内存管理不当等。今天和你一起来探讨下&#xff0c;苹果电脑卡顿反应慢时怎么办。希望能够帮助你解…

KBPC5010-ASEMI电源控制柜专用KBPC5010

编辑&#xff1a;ll KBPC5010-ASEMI电源控制柜专用KBPC5010 型号&#xff1a;KBPC5010 品牌&#xff1a;ASEMI 封装&#xff1a;KBPC-4 正向电流&#xff08;Id&#xff09;&#xff1a;50A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;1000V 正向浪涌电流&#x…

FreeRTOS中的动态内存管理(heap_1、heap_2、heap_3、heap_4)

FreeRTOS 提供了多种动态内存分配方案&#xff0c;这些方案通过不同的内存管理器&#xff08;heap managers&#xff09;实现&#xff0c;主要位于 FreeRTOS/Source/portable/MemMang 目录下。以下是几种常见的动态内存分配方案&#xff1a; heap_1 特点&#xff1a; 简单性…