服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 从头学习C语言之二维数组

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

2022-09-06 16:12极致猎手 C/C++

这篇文章主要为大家详细介绍了C语言之二维数组,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

二维数组:

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

语法:

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

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

二维数组存放方式:

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

二维数组的访问:

  • 数组名[下标][下标]
  • 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}};

示例:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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;

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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;

总结

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

原文链接:https://blog.csdn.net/HICKER_BOY/article/details/122658153

延伸 · 阅读

精彩推荐
  • C/C++C++基于回溯法解决八皇后问题示例

    C++基于回溯法解决八皇后问题示例

    这篇文章主要介绍了C++基于回溯法解决八皇后问题,简单描述了八皇后问题,以及回溯法的原理与解决八皇后问题的相关操作技巧,需要的朋友可以参考下...

    侯凯10762021-06-09
  • C/C++C语言 选择排序算法详解及实现代码

    C语言 选择排序算法详解及实现代码

    本文主要介绍C语言 选择排序算法,这里对排序算法做了详细说明,并附代码示例,有需要的小伙伴可以参考下...

    C语言中文网10362021-04-15
  • C/C++基于C语言实现简易扫雷游戏

    基于C语言实现简易扫雷游戏

    这篇文章主要为大家详细介绍了基于C语言实现简易扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    獨行劍俠11022022-08-24
  • C/C++求子数组最大和的实例代码

    求子数组最大和的实例代码

    求子数组最大和的实例代码,需要的朋友可以参考一下...

    脚本之家2342020-11-19
  • C/C++c字符串,string对象,字符串字面值的区别详解

    c字符串,string对象,字符串字面值的区别详解

    以下是对c字符串,string对象,字符串字面值的区别进行了详细的介绍,需要朋友可以 过来参考下...

    C语言教程网12692020-12-25
  • C/C++C语言是一个什么样的编程语言

    C语言是一个什么样的编程语言

    对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。C语言概念少,词汇少,包含了基本的编程元素,后来的很多语言(C++、Jav...

    hezeyujiang5402020-10-14
  • C/C++C语言实现简单的定时器

    C语言实现简单的定时器

    这篇文章主要为大家详细介绍了C语言实现简单的定时器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    研究猿小刘5502021-09-30
  • C/C++C语言中怎么在main函数开始前执行函数

    C语言中怎么在main函数开始前执行函数

    C语言中怎么在main函数开始前执行函数呢?下面小编就大家详细的介绍一下。需要的朋友可以过来参考下,希望对大家有所帮助...

    C语言教程网9692021-01-05