浅谈C语言数组之二维数组

运气男孩 发表于 2021/05/31 00:46:00 2021/05/31
【摘要】 前言数组是一组有序数据的集合。数组中各数据的排列是有一定规律的。下标代表数据在数组中的序号。数组中的每一个元素都属于同一种数据类型。不能把不同数据类型的数据放在同一个数组中。 一、怎样定义和引用二维数组? 怎么定义二维数组与一维数组类似,定义二维数组的一般形式为:类型符 数组名【常量表达式】【常量表达式】例如 : float a[4][5]; 它表示了一个float型数组a,第一维有4个...

前言

  1. 数组是一组有序数据的集合。数组中各数据的排列是有一定规律的。下标代表数据在数组中的序号。
  2. 数组中的每一个元素都属于同一种数据类型。不能把不同数据类型的数据放在同一个数组中。

一、怎样定义和引用二维数组?

怎么定义二维数组

与一维数组类似,定义二维数组的一般形式为:
类型符 数组名【常量表达式】【常量表达式

例如 : float a[4][5]; 它表示了一个float型数组a,第一维有4个元素,第二维有5个元素。每一维度的长度分别用一对方括号括起来,也可以说是定义a为4行5列的数组。注意不能把两个下标写在一个方括号里,这样是不对的。

c语言对二维数组采用这样的定义方式,使得二维数组可被看作一种特殊的一维数组,它的元素又是一维数组。例如,可以把a看作一维数组,它有4个元素 a[0],a[1],a[2],a[3], 其中每一个元素又是包含5个元素的一维数组。
a[0] -------- a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
a[1] -------- a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]
a[2] -------- a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]
a[3] -------- a[3][0] a[3][1] a[3][2] a[3][3] a[3][4]

可以把a[0],a[1],a[2],a[3]看作4个一维数组的名字

注意:用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列瓜西。而在内存中,各元素是连续存放的,不是二维的,是线性的。

怎么引用二维数组

     引用二维数组元素的表形式为
     数组名[下标][下标]
例如,a[2][3]就是数组a中序号为2的行中序号为3的列的元素,下标可以是整型常量和整型表达式,如a[2-1][2 +2-1]。
数组元素也可以出现在表达式中,也可以被赋值,例如
b[1][2]=a[2][3]/2

注意:在引用数组元素时,下标值应在已定义的数组大小范围内。在这个问题上常出现错误。例如
int a[3][4];
a[3][4]=3; //这是错误的,不存在a[3][4]元素

按以上的定义,数组a可用的“行下标”的范围为0-2,”列下标“的范围为0~3,用a[3][4]表示元素显然超过了数组的范围。

二、二维数组的初始化

1.初始化

为了使程序简洁,常在定义数组的同时给各数组元素赋值,这称为数组的初始化,可以用初始化列表实现数组的初始化。
(1)在定义数组的时对全部数组元素赋予初值。
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
这就称为初始化列表,这种赋初值方法比较直观,把第1个花括号内的数据给第1行的元素,第2个花括号的数据赋值给第二行的元素…即按行赋初值。
(2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。例如:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
效果与前相同。但以第一种方法号,一行对一行,界限清楚。
(3)可以对部分元素赋初值。例如:
int a[3][4] ={{1},{5},{9}};
它的作用只是对各行第一列的元素赋值,其余元素值自动为0。

1  0   0   0
5  0   0   0
9  0   0   0

也可以对各行中的某一元素赋初值,例如:
int a[3][4]={{1},{0,6},{0,0,011}};
初始化后的数组元素如下;

1  0   0   0
0  6   0   0
0  0   11  0

这种方法对非0元素少时比较方便,不必将所有的0都写出来,只须输入少量数据。
也可以只对某几行元素赋初值
int a[3][4]={{1},{5,6}};
数组元素为

1  0   0   0
5  6   0   0
0  0   0   0

第三行不赋初值。
也可以对第二行不赋初值,例如
int a[3][4]={{1},{},{5,6}};
(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
可以写成
int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
系统会自动根据花括号里的数据个数和第二维的长度确认第一维的长度。数组一共有12个元素,每行4列,显然可以确定行数为3。
在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。例如
int a[][4]={{0,0,3},{},{0,10}};
这样的写法,能通知编译系统,数组共有3行。数组各元素为

0 0 3 0
0 0 0 0
0 10 0 0

注意:凡未被初始化列表指定的初始化的数组元素,系统会自动把它们初始化为0.

2.程序举例

将一个二维数组行和列的元素互换,存到另一个二维数组中。例如:
程序:

#include <stdio.h>


int main()
{
    int a[2][3]={{1,2,3},{4,5,6}};
    int b[3][2],i,j;
    printf("array:\n");
    for(i=0;i<=1;i++){
    for(j=0;j<=2;j++){
    printf("%5d",a[i][j]);
    b[j][i]=a[i][j];
    }
    printf("\n");
    }
     for(i=0;i<=2;i++){
    for(j=0;j<=1;j++)
    printf("%5d",b[i][j])
    printf("\n");
    }
    return 0;
}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了二维数组的定义与使用,后面会继续讲字符数组,敬请期待。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。