从头学习C语言之二维数组

 更新时间:2022年01月27日 10:31:30   作者:极致猎手  
这篇文章主要为大家详细介绍了C语言之二维数组,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

二维数组:

引入一个想法:
一个变量:相当于一个点。
一维数组(也就是数组):点汇聚成为一条直线。
二维数组:直线汇聚成一个平面。
三维数组:平面汇聚成立体图形。

语法:

类型 数组名[常量表达式][常量表达式]

  • int a[6][6];//6*6,6行6列
  • char b[4][5];//4*5,4行5列
  • double c[6][3];//6*3,6行3列

二维数组存放方式:

在这里插入图片描述

二维数组的访问:

  • 数组名[下标][下标]
  • a[0][0];//访问a数组中第一行第一列的元素
  • b[1][3];//访问b数组中第二行第四列的元素
  • c[3][3];访问c数组中第四行第四列的元素
  • 同样要注意下标的取值范围,以防止数组的越界访问。
  • —比如int a[3][4],其“行下标”的取值范围是0 ~ 2,“列下标”的取值范围是 0 ~ 3,超出任何一个下标的访问都是越界访问。(非常容易中招

二维数组的初始化

  • 二维数组在内存中是线性存放的,因此可以将所有的数据写在一个花括号内:
  • int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
  • 为了更直观的表示元素的分布,可以用大括号将每一行的元素括起来:
  • int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  • 或者
  • int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  • 二维数组也可以仅对部分元素赋初值:
  • int a[3][4]={{1},{5},{9}};
  • 如果希望整个二维数组初始化为0,呢么直接在大括号里写一个0即可:
  • int a[3][4]={0};
  • C99同样增加了一种新特性:指定初始化的元素。这样就可以只对数组中的某些指定元素进行初始哈赋值,而未被赋值的元素自动初始化为0:
  • int a[3][4]={[0][0]=1,[1][1]=2,[2][2]=3};
  • 二维数组的初始化也能偷懒,让编译器根据元素的数量计算数组的长度。但只有第1维的元素个数可以不写,其他维度必须加上:
  • int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

示例:

例一:二维数组的舒服写法:

   #include<stdio.h>
   int main()
   {
     int a[3][4]={
       {1,2,3,4},
       {5,6,7,8},
       {9,10,11,12}
     };
     int i,j;
    for(i=0;i<3;i++)
    {
      for(j=0;j<4;j++)
      {
        printf("%d ",a[i][j]);
      }
     printf("\n");
     }
  printf("\n");
    return 0;
  }  

例二:对前三行每一行的第一个元素赋初值,其他没有被赋值的自动补充为0:

   #include<stdio.h>
   int main()
   {
     int a[3][4]={{1},{2},{5}};
     //把前三行每一行的第一个元素赋初值,其他没有被赋值的自动补充为0。
   //如果赋值的数,多于三个,后面的会报错,并且自动不算数。
     //如果没有对数组进行赋值,则得出的结果为随机数。
    int i,j;
    for(i=0;i<3;i++)
    {
    for(j=0;j<4;j++)
      {
        printf("%d ",a[i][j]);
      }
      printf("\n");
   }
    return 0;
  }  
 

例三:指定数组元素,其他元素自动补充为0:

   #include<stdio.h>
   int main()
   {
     int a[3][4]={[2][3]=1,[2][1]=8,[1][2]=5};
     int i,j;
     for(i=0;i<3;i++)
     {
       for(j=0;j<4;j++)
       {
        printf("%d ",a[i][j]);
      }
      printf("\n");
    }
    return 0;
  }  

例四:证明只有第一维可以不写数值:

   #include<stdio.h>  
   int main()  
   {  
     int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};//只有第一维可以不写
     int i,j;
    for(i=0;i<3;i++)
     {
       for(j=0;j<4;j++)
       {
        printf("%d ",a[i][j]);
      }
    printf("\n");
   }
    return 0;
  }  

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!   

相关文章

  • C++ 关于MFC List Control 控件的总结

    C++ 关于MFC List Control 控件的总结

    这篇文章主要介绍了C++ 关于MFC List Control 控件的总结的相关资料,十分的详细,有需要的朋友可以参考下
    2015-06-06
  • Matlab利用随机森林(RF)算法实现回归预测详解

    Matlab利用随机森林(RF)算法实现回归预测详解

    这篇文章主要为大家详细介绍了Matlab如何利用随机森林(RF)算法实现回归预测,以及自变量重要性排序的操作,感兴趣的小伙伴可以了解一下
    2023-02-02
  • C++实现LeetCode(102.二叉树层序遍历)

    C++实现LeetCode(102.二叉树层序遍历)

    这篇文章主要介绍了C++实现LeetCode(102.二叉树层序遍历),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言数组全面总结梳理

    C语言数组全面总结梳理

    在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活
    2022-02-02
  • C++生成随机数的实现代码

    C++生成随机数的实现代码

    这篇文章主要介绍了C++生成随机数的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • C++中的并行与并发基础与使用详解

    C++中的并行与并发基础与使用详解

    对于多线程来说,这两个概念有很大部分是重叠的。对于很多人来说,它们的意思没有什么区别。其区别主要在于关注点和意图方面(差距甚微)。这两个词都是用来对硬件在同时执行多个任务的方式进行描述的术语,不过并行更加注重性能
    2023-02-02
  • C++实现简单学生管理系统

    C++实现简单学生管理系统

    这篇文章主要为大家详细介绍了C++实现简单学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 如何利用C++实现mysql数据库的连接池详解

    如何利用C++实现mysql数据库的连接池详解

    为了提高MySQL数据库的访问的瓶颈,除了在服务器端增设缓存服务器缓存常用的数据之外(如redis),还可以增加数据库连接池,来提高MySQL Server的访问效率,这篇文章主要给大家介绍了关于如何利用C++实现mysql数据库的连接池的相关资料,需要的朋友可以参考下
    2021-07-07
  • C语言入门篇--变量的左值和右值

    C语言入门篇--变量的左值和右值

    本篇文章是基础篇,适合c语言刚入门的朋友,本文对初识c语言的指针和指针变量做了简单的分析,帮助大家快速入门c语言的世界,更好的理解c语言
    2021-08-08
  • C++中VTK9.3.0刻度标签重叠的问题记录

    C++中VTK9.3.0刻度标签重叠的问题记录

    这篇文章主要介绍了C++中VTK9.3.0刻度标签重叠的问题,本文采用VTK9.3.0版本,其他版本如VKT8.0亦有同样的问题,需要的朋友可以参考下
    2024-06-06

最新评论