当前位置: 首页 > news >正文

//二维数组的遍历方式

//一索引

//1,索引(要求:二维数组里的一维数组长度必须一样)

#include<stdio.h>
int main()
{
    //1,定义格式
    int arr[3][5] = {

        {1,2,3,4,5},
        {6,7,8,9,10},
        {11,12,13,14,15}
    };
    for (int i = 0; i < 3; i++)//i:表示二维数组中的索引
    {
        for (int j = 0; j < 5; j++)//依次表示一维数组的索引,遍历每一个一维数组
        {
            printf("%d\t", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

//2.索引遍历(二维数组里的一维数组长度可以不相等)
//核心:事先把所有的一维数组定义完毕,再放到二维数组中
#include<stdio.h>
int main()
{
    int arr1[] = { 1,2,3};
    int arr2[] = { 4,5,6,7,8 };
    int arr3[] = { 9,10,11,12,13};
    int len1=sizeof(arr1) / sizeof(int);
    int len2=sizeof(arr2) / sizeof(int);
    int len3=sizeof(arr3) / sizeof(int);
    int lenARR[3] = { len1,len2,len3 };
    //int arr[3] = { arr1,arr2,arr3 };//存的一维数组的内存地址
    int *arr[3] = { arr1,arr2,arr3 };//存的一维数组的值
    //数组的数据类型,和内部存储的元素类型保持一致
    for (int i = 0; i < 3; i++)
    {
        //i:依次表示二维数组的索引,范围:0,1,2
        //错误做法:int len = sizeof(arr[i])/sizeof(int);//arr[i]退化为内存地址,在64位计算机中占8字节
        for (int j = 0; j < lenARR[i]; j++)
        {
        
            printf("%d\t", arr[i][j]);
        }
        printf("\n");
    }


    return 0;
}

//二 指针遍历

//1第一种指针遍历方式

#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* int是一维数组的
    //int(*p)[5]=arr;
    //步长:类型长度*5=20;移动一步,跳过一个数组
//数据类型*p=arr
    //数组指针的数据类型:要跟数组内部的元素的类型保持一致
    //二维数组中存储的是一维数组int[5]
    int (*p)[5] =&arr;//二维数组的数据类型int[5]   /指针定义格式:数据类型*指针名

//数据类型是int[5]      一般写作int(*p)[5]
    

    for (int i = 0; i< 3; i++)
    {
        //遍历一维数组
        for (int j = 0; j < 5; j++)
        {
            printf("%d\t", *(*p + j));//*p二维数组,*(*p+j)遍历二维数组中的一维数组,通过偏移量j来遍历
        }
    
        //换行
        printf("\n");
        p++;//移动二维数组的指针,继续遍历下一个一维数组
    }
    return 0;
}


//2.指针遍历,第二种遍历格式
#include<stdio.h>
int main()
{
    int arr1[5] = { 1,2,3,4,5 };
    int arr2[5] = { 6,7,8,9,16};
    int arr3[5] = { 10,11,12,13,14 };
    int* arr[3] = { arr1,arr2,arr3 };//数据类型  数组名[]
    //二维数组存的实际上是一维数组的内存地址,所以类型要用int*
    int** p = arr;
    //int * (数据类型)*p
    for(int i=0;i<3;i++)
    {
        for (int j = 0; j < 5; j++)
        {
            printf("%d\t", *(*p+j));///p:二维数组地址 ; *p:指向二维中的一维; *p+j:一维数组的地址向前遍历;*(*p+j):解引用一维数组的数据
        }

        //换行
        printf("\n");
        //移动指针
        p++;
    }

    return 0;
}


http://www.mrgr.cn/news/68859.html

相关文章:

  • isc-dhcp-server
  • canal1.1.7使用canal-adapter进行mysql同步数据
  • netty之写出数据源码分析
  • Prompt 工程
  • sdm845(oneplus6)的启动漰溃ramdump被提交3e7f37解析-内核启动日志报错(空指针、Oops)
  • 一文了解Android本地广播
  • pandas习题 054:将两个 DataFrame 导出到 Excel 的不同表
  • 【系统集成项目管理工程师】英语词汇对照表-项目管理类
  • Kubernetes 调度器调度策略的资源分配不均问题如何解决?
  • stm8开发笔记--STVD开发软件的安装
  • 针对oneplus6 怎么选择lineage源码的什么分支
  • vue3中配置svg图标
  • 公开仓库改私有再配置公钥后Git拉取仍需要输入用户名的问题
  • 【Linux】一篇文章轻松搞懂基本指令
  • 大牛直播SDK如何实现Android平台多路RTSP播放?
  • Python 连接 Redis 进行增删改查(CRUD)操作
  • Python venv 虚拟环境 相关 Windows环境 2024 /11/9
  • 什么是Flutter,有什么特点
  • 使用多种机器学习调参模型进行二分类建模的全流程教程,代做分析
  • 我自己nodejs练手时常用的一些库基础用法
  • 嵌入式ARM平台Linux网络实时性能优化
  • vue3框架还需要学习什么
  • XSS漏洞--常用payload及绕过
  • 双亲委派模型的破坏
  • JavaScript中异步函数的执行时机
  • Python 中使用组合方式构建复杂正则