二维数组

简介: 一、二维数组的定义二、二维数组的访问三、二维数组的初始化

二维数组

  

内容介绍:

一、二维数组的定义

二、二维数组的访问

三、二维数组的初始化

 

 

一、二维数组的定义

1、如果点是一个单独的变量,那么线就是一个数组,数组就是一堆紧挨着的存放在一起的变量。一维数组其实就是一个点,二维数组其实就是一个面

 

2、随着开发的深度,发现有些情况下,一维数组有时很难满足需求,但引入二维数组的概念之后问题就可以变得简单许多。

 

3、比如存放综合成绩,如果使用二维数组只需要定义一个数组,二维数组通常称之为矩阵,将二维数组写成行和列表示的形式可以解决很多问题。

 

4、定义方法:

使用方括号来指定每一个元素的个数

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

int a[6][6];// 6*6,定义一个66列的二维数组

char b[4][5]; 1/ 4*5,定义一个45列的二维数组

double c[6][3];1/ 6*3,定义一个63列的二维数组

 

概念模型图分别是:

A

image.png

 

 

 

B

image.png

 

C

image.png

这个概念模型图可以帮助我们更好的理解数组


5、在c语言中,内存语言是线性的,二维或者三维或者思维数组内存中的存放都是线性的。


6、案例:int b[4][5];//定义一个二维数组

//内存存放图

首先是一维数组,第二行就是二维数组存放图

image.png

每一个元素包含其他的5个元素,这就是二维数组

每一个元素再放一个一维数组,相当于一维数组的嵌套

 

案例:要计算一个班4个科目的成绩

image.png

一维数组:

int chinese [50];

int math[50] ;

int english[50];

int comprehensive[50] ;

 

二维数组:

int score[4][50];

score[0][0] = 80; .

score[1][0] = 78;

score[2][0] = 67;

score[3][0] = 88;

 

由此可见二维数组只需要定义一个就可以解决了,在这个问题中比一维数组更加简单,有效

 

三维数组就关系到长宽高了,就例如游戏中的人物模型

 

 

二、二维数组的访问

格式:数组名[下标][下标]

a[0][0];//访问a数组中第1行第1列的元素

b[1][3];//访问b数组中第2行第4列的元素

c[3][3];//访问C数组中第4行第4列的元素

 

注意:

同样需要注意下标的取值范围,以防止数组的越界访问。

比如int a[3][4],那么就是3x4列的二维数组,其行下标的取值范围是0~2列下标的取值范围是0~3,超出任何一个下标的访问都是越界访问。

 

C语言的越界访问是一重大灾难,因为没有越界的检查,初学者很容易出错,所以一定要避免。

 

 

三、二维数组的初始化

1、由于二维数组在内存中是线性存放的,因此可以将所有的数据写在一个花括号内:

int a[3][4]= {1, 2,3,4, 5,6,7,8,9,1011,12};

 

2、案例:

#include <stdio.h>

int main( )

//定义变量数组

int a[3][4] = {1, 2,3,4,5,6,7,8,9,1,11,12};

int I,j;

//for循环进行遍历

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

printf("%d”a[i][j]);

printf("\n");

}

return 0;

}

保存运行:gcc test1.c && ./a.out

结果:

1 2 3 4

5 6 7 8

9 1 11 12

 

3、为了更直观地表示元素的分布,可以用大括号将每一行的元素括起来:

int a[3][4]={1,2, 34},{5, 6,7,8},{9,10,11,12};

为了避免访问困难

或者

int a[3][4]={

{1,2,34},

{5,67,8},

{9,10,11,12}

};

虽然占了更多的空间,但是更加符合我们的想法

 

二维数组也可以仅对部分元素赋初值:

int a[3][4] ={{1},{5],{9}3;

 

案例:

#include <stdio.h>

int main( )

//定义变量数组

//测试159的值都赋值在哪了

int a[3][4] = {{1},{5},{9}};

int I,j;

//for循环进行遍历

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

printf("%d”a[i][j]);

printf("\n");

}

return 0;

}

保存运行:gcc test1.c && ./a.out

结果:

1 0 0 0

5 0 0 0

9 0 0 0

结论:是把前三行每一行的第一列赋值为159,没有赋值的用0填充,一个大括号表示一行

 

如果希望整个二维数组初始化为0,那么直接在大括号里写一个0即可:

int a[3][4] ={0};

数组如果没有进行初始化,就会出现随机的值

 

C99同样增加了一种新特性:指定初始化的元素。这样就可以只对数组中的某些指定元素进行初始化赋值,而未被赋值的元素自动初始化为0:

int a[3][4]={[e][0] = 1,[1][1]=2,[2][2]=33;

 

案例:

#include <stdio.h>

int main( )

//定义变量数组

//测试159的值都赋值在哪了

int a[3][4] = {[0][0]=1,[1][1]=2,[2][2]=3};

int I,j;

//for循环进行遍历

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

printf("%d”a[i][j]);

printf("\n");

}

return 0;

}

保存运行:gcc test1.c && ./a.out

结果:

1 0 0 0

0 2 0 0

0 0 3 0

 

二维数组的初始化也能偷懒,让编译器根据元素的数量计算数组的长度。但只有第1维的元素个数可以不写,其他维度必须写上:不然就会报错。

int a[][4] = {1,2, 3,4},{5, 6,7,8},{9,10,11,12}];

int a[][] = {1,2, 3,4},{5, 6,7,8},{9,10,11,12}];

这种就会报错

 

计算成绩案例:

#include <stdio.h>

int main()

int a[4][5] = {

{80,92,85,86,99},

{78,65,89,70,99},

{67,78,76,89,99},

{88,68,98,90,99}

};

int i, j;

for (i = 0 ; i< 4; i++)

{

for(j = 0; j< 5; j++)

printf(""%d ", a[i][j])

}

printf ("\n");

}

return 0;

}

保存运行:gcc test1.c && ./a.out

结果:

80,92,85,86,99

78,65,89,70,99

67,78,76,89,99

88,68,98,90,99

 

结论:

横向变纵向

纵向变横向只需要修改双重循环的值:

for (i = 0 ; i< 5; i++)

{

for(j = 0; j< 4; j++)

printf(""%d ", a[j][i])

}

和上面代码对比

 

 

相关文章
|
7月前
|
存储 算法 搜索推荐
15一维数组
15一维数组
65 0
【一维数组和二维数组】
【一维数组和二维数组】
62 0
|
7月前
|
存储 编译器 C语言
认识一维数组和使用
**数组概念与特性:**数组是一组相同类型元素的集合,包含至少一个元素。数组可分为一维和多维(如二维数组)。在创建时需指定大小和元素类型,如`int arr[5]`表示一个包含5个整数的数组。数组元素通过下标访问,下标从0开始。数组在内存中连续存放,可以通过`sizeof`计算数组占用的字节数以间接获取元素个数。
56 1
|
7月前
|
存储 C语言
二维数组的使用
这篇内容介绍了二维数组的概念,它是将一维数组作为元素构成的数组,也称为多维数组。文章详细讲解了如何创建二维数组,包括指定行数和列数,并展示了不同类型的初始化方式:不完全初始化(剩余元素设为0)和完全初始化。此外,还提到了按照行初始化的语法。内容中强调了C语言中二维数组的行和列都从0开始计数,并通过示例解释了如何访问和输出数组元素。最后,讨论了二维数组在内存中的存储方式,它是一维数组数组,元素在内存中是连续存放的。
78 0
|
7月前
|
存储 算法 搜索推荐
16二维数组
16二维数组
48 0
|
7月前
|
存储 算法 C++
C++013-C++二维数组
C++013-C++二维数组
C++013-C++二维数组
|
7月前
|
算法 C++
C++012-C++一维数组
C++012-C++一维数组
C++012-C++一维数组
|
7月前
|
JavaScript 前端开发 索引
如何对实现一维数组转化为二维数组
本文章实现了数组之间的转换
|
存储
二维数组剖析
二维数组剖析
58 0
|
7月前
|
C语言
二维数组的知识
二维数组的知识
下一篇
DataWorks