首页 > 其他分享 >C语言---二维数组

C语言---二维数组

时间:2024-07-25 12:28:24浏览次数:15  
标签:arr 一维 int C语言 --- ++ 二维 数组

1.1 概念

        从逻辑上有行有列的数组,成为二维数组,相对来讲,只有行这种单一线性结构的数组称为一维数组。二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。定义由行和列组成的二维表格形式元素,二维数组其实也就是矩阵基本格式。访问二维数组需要两个值来确定这个二维数组的位置,即某行某列。

1.2 语法结构
1.2.1 二维数组的声明

数据类型 数组名 【行数】【列数】;

eg:int arr[2][3] 

行数以及列数代表了该数组结构中有几行几列,必须是整形常量表达式,同时需要大于0。

1.2.2 初始化二维数组

数据类型  数组名【行数】【列数】=  {值};

以下是二维数组的完全初始化以及不完全初始化:

1.2.3 访问二维数组

和一维数组一样,使用二维数组也是通过访问二维数组的元素来实现。

语法:

数组名 【行下标】【列下标】;

行下标范围:【0,行数-1】

列下标范围:【0,列数-1】

1.2.4 二维数组的本质

(1)二维数组的逻辑结构如下:

(2)可以通过代码实现看到二维数组的内存结构也是连续的:

        因此从计算机的角度来看,不存在二维数组这种物理结构,实际上计算机编译器所理解的二维数组只不过是由若干个一维数组嵌套而成的一维数组,即是一维数组的嵌套。

        如上图所示,int a[3][3]二维数组在计算机中的处理,代表了有三个一维数组组成的所谓的二维数组,这也是为什么在初始化时,行数可以省略,而列数不可省略的原因。

int arr2[][3] = { 1,2,3,4,5,6 }; //列数必须写,根据列数自动分配行数;行数可不写, 行数代表元素个数,

        图中紫色部分代表行数,它在某种理解上来讲是可变的。它是相对于该一维数组的第一个元素的位置。若按我们认知的二维数组逻辑结构来运行以下代码,会产生’越界‘访问,然而计算机在实际处理中,是可以正常访问的,运行结果如下,是数值4。即访问的是第一个一维数组,相对于第一个元素的第三个位置上的元素。

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

1.2.5 数组的下标具体代表什么

        下标:相对于数组的第一个元素的位置。

   1.3 二维数组的应用
1.3.1 二维数组的遍历

嵌套循环,外层是行,内层是列

#include<stdio.h>
int main() {
	int a[3][3] = { 1,2,3,4,6,8,9,20,24 };
	int i, j;
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			printf("%d\t", a[i][j]);
		}
		putchar('\n');
	}
}
1.3.2 二维数组的行列置换代码实现

for循环实现:

#include <stdio.h>
int main()
{
	int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int i, j, t;
	//遍历数组 依次打印
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++) {
			printf("%d\t", arr[i][j]);
		}
		putchar('\n');
	}
	//交换行列上的数据
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++) {
			if (i < j) {
				t = arr[i][j];
				arr[i][j] = arr[j][i];
				arr[j][i] = t;
			}
		}
		putchar('\n');
	}
	printf("**************************************\n");

	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++) {
			printf("%d\t", arr[i][j]);
		}
		putchar('\n');
	}

	return 0;
}

	/*
	0 2  1 0
	0 2  2 0
	1 2  2 1
	*/

运行结果如下:

标签:arr,一维,int,C语言,---,++,二维,数组
From: https://blog.csdn.net/m0_60631703/article/details/140655857

相关文章

  • 油管视频《编程思维》中的题目,使用C语言编写出来,第三集,炉膛机器人
    题目:假设起初只有一个机器人,他的炉膛里有一个数字0,和另一个未知的任意生成的编码,随着推移,原始机器人自我复制,制造出更多一样的炉膛机器人,被原始机器人自我复制制造出的每一个子机器人的熔炉内,都继承了原始机器人未知的编码,并且有一个属于自己,独一无二的编码刻在外壳,第二代炉膛......
  • Llama3.1以405B参数领先GPT-4o
    Llama3.1以405B参数规模领先GPT-4o,并在多项基准测试中展现出强大的性能,尤其是在通用常识、可操纵性、数学、工具使用和多语言翻译等方面。Llama3.1的参数规模和性能参数规模Llama3.1系列模型包括8B、70B和405B三种参数规模,其中405B模型包含4050亿个参数,是近年来规模最大LLM......
  • Java编程指南:高级技巧解析 - Excel单元格样式的编程设置
    最新技术资源(建议收藏)https://www.grapecity.com.cn/resources/前言在Java开发中,处理Excel文件是一项常见的任务。在处理Excel文件时,经常需要对单元格进行样式设置,以满足特定的需求和美化要求,通过使用Java中的相关库和API,我们可以轻松地操作Excel文件并设置单元格的样式。在......
  • SpringBoot+@Validated实现参数验证(非空、类型、范围、格式等)-若依前后端导入Excel
    原文链接: 霸道的程序猿的博客(cnblogs.com)若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108278834SpringBoot+Vue实现excel导入带格式化的时间参数(moment格式化明天日期并设置el......
  • 在K8S中,api-service 和 kube-schedule 高可用原理是什么?
    在Kubernetes(简称K8s)中,api-service和kube-scheduler的高可用原理是确保这些关键组件在部分节点或实例出现故障时,集群的整体功能和稳定性不受影响。下面分别详细解释这两个组件的高可用原理:1.APIServer高可用原理APIServer作为Kubernetes集群的API网关,负责接收来自用户和其他......
  • 4、内存品牌分类介绍(金士顿) - 计算机硬件品牌系列文章
    金士顿科技是全球最大的存储产品制造商之一,‌成立于1987年,‌由杜纪川和孙大卫创立。‌金士顿的产品线涵盖了超过2000种内存产品,‌包括但不限于小型机、‌工作站、‌服务器、‌激光打印机、‌数码相机、‌笔记本等,‌并与世界知名品牌厂商如HP、‌DELL、‌IBM、‌SUN、‌APPLE......
  • 文件系统介绍 --- ubifs
    UBIFS(UnsortedBlockImageFileSystem)无序区块镜像文件系统是用于固态存储设备上,UBIFS在设计与性能上均较YAFFS2、JFFS2更适合MLC(Multi-LevelCell)NANDFLASH。例如:UBIFS支持凑数(write-back),其写入的数据会被缓存起来,直到有必要写入时才写到flash,这样大大降低分散小区......
  • 【云原生之kubernetes实战】在k8s环境下部署go-file文件分享工具
    【云原生之kubernetes实战】在k8s环境下部署go-file文件分享工具一、go-file介绍1.1go-file简介1.2go-file特点1.3go-file使用场景二、本次实践介绍2.1本次实践简介2.2本次环境规划2.3本次实践存储介绍2.4k8s存储介绍三、检查k8s环境3.1检......
  • 队列及其C语言实现
    2.3队列2.3.1什么是队列队尾入队,队头出队,一个受限制性的线性表。队列(Queue):具有一定操作约束的线性表•插入和删除操作:只能在一端插入,而在另一端删除。•数据插入:入队列(AddQ)•数据删除:出队列(DeleteQ)•先来先服务•先进先出:FIFO 2.3.2队列的抽象数据类型描述 ......
  • vue的组件事件/组件事件配合v-model使用/组件数据传递/
    1.组件事件形式为:父级页面中格式——引入子级页面importxxfrom'url'<xx@事件名="函数名"/>子级页面中格式——添加点击事件<button@click="自定义函数">自定义函数(){//自定义事件this.$emit("事件名","文本内容")}2.组件事件配合v-model使用v-modelwatch......