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

//二维数组的遍历方式

//一索引

//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.kler.cn/a/386368.html

相关文章:

  • 2411d,右值与移动
  • 1111111111待修改--大流量分析(三)-BUUCTF
  • JavaScript高级程序设计基础(四)
  • IEC60870-5-104 协议源码架构详细分析
  • Kubernetes在容器编排中的应用
  • C++组合复用中,委托的含义与作用
  • 分布式数据库中间件mycat
  • DIP switch是什么?
  • pdb和gdb的双剑合璧,在python中调试c代码
  • [Meachines] [Medium] MonitorsThree SQLI+Cacti-CMS-RCE+Duplicati权限提升
  • 【ESP32+MicroPython】硬件控制基础
  • Python毕业设计-基于 Python flask 的前程无忧招聘可视化系统,Python大数据招聘爬虫可视化分析
  • Flink处理无界数据流
  • TDengine 签约蘑菇物联,改造通用设备工业互联网平台
  • mac端mumu模拟器adb识别不了问题
  • Qt学习笔记(三)网络编程
  • DevExpress中文教程 - 如何使用AI模型检查HTML编辑中的语法?
  • RabbitMQ客户端应用开发实战
  • 一文读懂系列:结合抓包分析,详解SSH协议通信原理
  • Node.js-API 限流与日志优化
  • 【Threejs】相机控制器动画
  • php伪协议介绍
  • 树莓派开发相关知识十 -小试服务器
  • 智能电网能源优化管理系统(Smart Grid Energy Optimization Management System, SGEOMS)
  • jupyter notebook启动和单元格cell
  • java ssm 网上蛋糕店 在线蛋糕甜品管理 网上蛋糕管理 源码 jsp