二维数组(初学者)

1、二维数组的定义:当数组中每个元素带有两个下标时,称这样的数组为二维数组。在逻辑上可以把二维数组看成是一个具有行和列的表格或一个矩阵。

一般形式:类型说明符 数组名[常量表达式1][常量表达式2];

例:定义a为3*4(3行4列)的数组,b为5*10(5行10列)的数组。

#include <stdafx.h>
#include<stdio.h>

void main()
{
    float a[3][4],b[5][10];
}

在内存中的表达:

例如:int a[3][4];说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型,该数组的下标变量共有3*4个。即:

a[0][0], a[0][1], a[0][2], a[0][3]

a[1][0], a[1][1], a[1][2], a[1][3]

a[2][0], a[2][1], a[2][2], a[2][3]

在C语言中可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有若干个元素的一维数组。如以上a数组可以看成是由a[0]、a[1]、a[2]三个元素组成的一维数组,其中每个元素又是由四个整型元素组成的一维数组。建立起这一概念是十分重要的,因为C语言编译系统确实是把二维数组a中的a[0]、a[1]、a[2]作为数组名来处理的。

二维数组在概念上是二维的,但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。

如何在一维存储器中存放二维数组,有两种方式:一种是按行排列,即放完一行后顺次放入第二行。另一种是按列排列,即放完一列后再顺次放入第二列。在C语言中,二维数组是按行排列的。

衍生:多维数组的定义

定义三维数组:float a[2][3][4];

多维数组在内存中的排列:第一维的下标变化最慢,最右边的下标变换最快。

(图百度的=-=)

2、二维数组的引用和初始化

形式:数据类型 数组名[常量表达式1][常量表达式2]={初始化数据};

二维数组的初始化有四种方式:

(1)所赋初值个数与数组元素的个数相同

可以在定义二维数组的同时给二维数组的各元素赋初值。

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

全部初值括在一对花括号中,之间用逗号隔开。

(2)每行所赋初值个数与数组元素个数不同

当某行一对花括号内的初值个数少于该行中元素的个数时,如:

int a[4][3]={{1,2},{4,5},{7},{10}};

系统将自动给该行后面的元素补初值0。因此,a[0][2]、a[2][1]的初值为0。也就是说,不能跳过每行前面元素二给后面的元素赋初值。

(3)所赋初值行数少于数组行数

当代表着给每行赋初值的行花括号对少于数组的行数时,如:

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

系统将自动给后面各行的元素补初值0。

(4)赋初值时省略行花括号对

在给二维数组赋初值时可以不使用行花括号对,如:

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

系统将按a数组元素在内存中的排列顺序,将花括号中的数据一一对应的赋给各元素,若数据不足,系统将给后面的元素自动补初值0。

注:如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度则不能省。

例: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};

在定义时可以只对部分元素赋初值而省略第一维长度,但应分行赋初值。

例:int a[][4]={{0,0,3},{},{0,10}};

不建议使用

 

 

 

 

posted on 2019-01-22 23:10 巫师笔记 阅读(...) 评论(...) 编辑 收藏

导航

统计

公告