首页 > 其他分享 >利用索引遍历二维数组

利用索引遍历二维数组

时间:2024-11-12 19:18:40浏览次数:3  
标签:arr 遍历 arr1 int 索引 二维 arr3 数组 sizeof

文章目录

  • 一、两种二维数组初始化定义方法
  • 二、索引遍历的代码

一、两种二维数组初始化定义方法

int arr[3][5] = {
	{1,2,3,4,5},
	{11,22,33,44,55},
	{6,5,4,3,2}
	};

第一种初始化方法比较直观,即大括号内包含3对一维数组,每对一维数组的长度都为5,这种方法适合于一维数组长度固定的二维数组,缺陷性太大

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

第二种方法就灵活性很多,三对一维数组长度可以自由定义,我着重写一下第四行代码int* arr[3] = { arr1,arr2,arr3 },这里其实用到了指针的概念,大家要知道数组名即这里的arr1,arr2,arr3是各自数组0索引的地址,也就是指向首个元素的地址,不能将它看为是整个数组,而指针是指向内存的地址,所以这里定义就要写为指针数组

二、索引遍历

1.

#include<stdio.h>
int main()
{
	int arr[3][5] = {
		{1,2,3,4,5},
	    {11,22,33,44,55},
	    {6,5,4,3,2}
	                };
   for (int i = 0; i < 3; i++)
	{
	for (int j = 0; j < 5; j++)
		{
			printf("%d ",arr[i][j]);
		}
 		printf("\n");
    }
	return 0;
}

第一种方法比较容易理解,两个for循环嵌套,实现对二维数组中元素的遍历

2.

#include<stdio.h>
int main()
{
	int arr1[4] = { 1,2,3,4 };
	int arr2[5] = { 6,7,8,9,10 };
	int arr3[6] = { 11,12,13,14,15,16};
	int* arr[3] = { arr1,arr2,arr3 };
	int len1 = sizeof(arr1) / sizeof(int);
	int len2 = sizeof(arr2) / sizeof(int);
	int len3 = sizeof(arr3) / sizeof(int);
	int len[3] = {len1,len2,len3};
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < len[i]; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

第二种方法大家可以看到我首先求了三个一维数组的长度,之后又定义了一个二维数组用来存放长度,我为何不直接在for循环里这样写呢:

for (int i = 0; i < 3; i++)
{
	int len = sizeof(arr[i]) / sizeof(int);
	for (int j = 0; j < len; j++)
	{
		printf("%d ", arr[i][j]);
	}
	printf("\n");
}

首先我先将这种写法的运行结果给大家展示一下

大家可以看到每个一维数组最终只输出了前两个元素,为什么会这样呢,这是因为:

在64位的操作系统中,一共有64个bit位,而在 int len = sizeof(arr[i]) / sizeof(int)中,我们上文写过,一旦数组arr参与计算的时候,数组会退化为第一个元素的指针,而64位操作系统中,数组所占的字节数是8,int所占字节数是4,两者相除,最后得到的长度不就为2了么。

所以这种写法行不通,就需要我们再定义一个二维数组用来存放三个一维数组的长度。

标签:arr,遍历,arr1,int,索引,二维,arr3,数组,sizeof
From: https://blog.csdn.net/m0_73456910/article/details/143690473

相关文章

  • 深入理解MySQL索引的底层原理和优化
    深入理解MySQL索引的底层原理和优化1.什么是索引索引是帮助MySQL高效获取数据的排好序的数据结构。用于提高查询性能,相当于书的目录。比如我们在读一本书的时候,首先是通过目录来定位到文章的页码,然后通过页码再来快速定位到具体的内容。MySQL中也是一样,在查询数据的时候,首先看......
  • 优化RAG索引策略:多向量索引与父文档检索技术
    引言在RAG(检索增强生成)系统中,索引策略直接影响检索的效率和准确性。本文将深入探讨两种先进的索引优化技术:多向量索引和父文档检索,以及一种高级的RAG优化策略——RAPTOR。这些技术能够显著提升RAG系统的性能,尤其是在处理长文档和复杂查询时。多向量索引技术多向量索引的概念多......
  • 关于分治法左右区间单调遍历应该如何设计
    阅读以下文章,首先至少要求通过一道分治法的题目或听过一道该类型的讲解。对于分治的题目,想必你应该知道,通常我们是对于一个区间拆分两个部分,而最小子问题通常是只包含一个元素的区间数组。为了后续方便处理更大范围的区间,通常在处理该小区间后,我们会将其区间内元素排序,例......
  • 第12课 二维数组(1)
    string类型不知道各位童鞋们都掌握了没,没掌握的话,嘿嘿嘿(抱拳)我稍微练过一点散打哦。好了,开玩笑的,今天的课程难度较高,所以我决定分三课讲,就是想让大家把二维数组彻底吃透,以便于学习后面的三维,四维数组。好了,废话不多说,说多了也是废话,废话就是废话,还是不要说废话了。正片开始!1.......
  • 使用halcon完成一维码、二维码的识别
    图片素材 通过网盘分享的文件:图片5链接:https://pan.baidu.com/s/1r9SG4lZ3ZQ5S-NGVsFx70w?pwd=BFDJ提取码:BFDJ读码一维码创建读码句柄create_bar_code_model([],[],BarCodeHandle)参数一:输入通用参数可以调整条形码模型的名称。参数二:通用参数可以调整条形码......
  • 4-5-1.C# 数据容器 - Stack(Stack 的定义、Stack 元素的基本操作、Stack 元素的遍历、S
    Stack概述Stack<T>遵循后进先出的规则存储元素Stack<T>支持泛型,可以指定存储的元素的类型Stack<T>不是线程安全的,在多线程环境中需要谨慎使用一、Stack的定义定义StackStack<int>nums=newStack<int>();定义Stack并填充一些元素Stack<int>nums......
  • 4-4-1.C# 数据容器 - Queue(Queue 的定义、Queue 元素的基本操作、Queue 元素的遍历、Q
    Queue概述Queue<T>遵循先进先出的规则存储元素Queue<T>支持泛型,可以指定存储的元素的类型Queue<T>不是线程安全的,在多线程环境中需要谨慎使用一、Queue的定义定义QueueQueue<int>nums=newQueue<int>();定义Queue并填充一些元素Queue<int>nums=......
  • 4-3-1.C# 数据容器 - Dictionary(Dictionary 的定义、Dictionary 元素的基本操作、Dict
    Dictionary概述Dictionary<TKey,TValue>存储的是键值对(Key-Value),通过键(Key)来存储或修改值(Value)Dictionary<TKey,TValue>存储的键值对是无序的Dictionary<TKey,TValue>存储的键是不可重复的Dictionary<TKey,TValue>支持泛型,可以指定存储的键值对的类型D......
  • 信息收集2-----网络空间资产搜索引擎使用
    一.FOFA官网描述:FOFA-网络空间资产搜索引擎是北京华顺信安推出的一款通过对全球网络对外开放服务的资产进行主动或被动方式探测、抓取、存储,分析整理不同种类的网络空间资产指纹信息(规则),并对符合规则的资产进行统计分析,进而快速检索全球网络空间资产的产品。它能够帮助用户迅速......
  • 二维数组
    一维数组定义:inta[N];初始化:inta[3]={1,2,3};for(i=0;i<3;i++){scanf("%d",&a[i]);}储存结果:数组元素在内存中存放是连续的实例:逆序存放冒泡选择排序二分查找二维数组inta[2][3];//三行四列inta[2][3]={{1,2,3},{4,5}};inta[2][3]={1,2,3,4,5};......