二维数组(初学者)

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

不建议使用

 

 

原文地址:https://www.cnblogs.com/lvfengkun/p/10306514.html

时间: 2024-11-03 08:18:08

二维数组(初学者)的相关文章

二维数组举例1(初学者)

例:一个学习小组有5个人,每个人有3门课的考试成绩.将各个数据保存到二维数组a[5][3]中,并求全组分科的平均成绩和总平均成绩.   张 王 李 赵 周 math 80 61 59 85 76 C 75 65 63 87 77 Foxpro 92 71 70 90 85 #include <stdafx.h> #include<stdio.h> void main() { int i,j,sum=0,average,v[3]; int a[5][3]={{80,75,92},{6

二级指针与二维数组

最近看<Linux C程序设计大全>这本书,虽然书中有一些错误,但整体来说,书写得还算可以. 当看到网络编程[第23.2.4小节 获得主机信息]时,遇到了一段代码,原文如下: “一台主机有许多和网络相关的信息,例如,主机名称.IP地址.主机提供的服务等.这些信息一般都保存在系统中的某个文件里(例如/etc/hosts等),用户程序可以通过系统提供的函数读取这些文件上的内容.Linux环境下使用gethostent函数读取和主机有关的信息,该函数的原型如下: 1 #include <net

C++二维数组动态申请内存

好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了.怪我,大二下实在太颓废了,没啥作为. 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的.今天用到了,顺便写下来,适当时候给C++初学者用用. -----------C++二维数组动态申请内存-------------- 如果对new和delete不是很了解的话可以到这里来看看,http://www.cnblogs.com/hazir/p/new_and_delete.html 首先,我们一般需

直观理解C语言中指向一位数组与二维数组的指针

一维数组和指针: 对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我

二维数组中数组名与其指针的关系

大多数初学者不是很清楚二维数组是个怎样的存在,今天我就来说说这个二维数组,计算机内存是一连串的存储单元,我们可以把它理解成一条线,没错就是一条线,那么问题来了,二维是个怎样的存在呢???说白了,二维数组并不真是二维,只是人们主观的将它变成二维,举个例子吧!比如楼梯,我们都知道楼梯说白了就是一条路,但是我们刻意将楼梯来回上升的方式,这都是我们主观的改变,实际上我们可以看成是一个直路,只是被工人弄弯了.好了,不扯了,进入主题.... 二维数组名a是数组第一行的指针,它指向的是一整行,*a才是a[0]

来点福利,看二维数组如何打造推箱子小游戏

C语言学好,通杀C++.这就是方向之一. 前面看过的读者,是不是觉得很鸡肋的知识,全是基本的运用,可是呢?还是看不出能干吗. 那么下面就用二维数组打造,推箱子小游戏.首先,得问问,有何思路? 光写没有用,没到一部分内容觉得可以了,最好先打印下看看效果,要不然写到都不知道自己有没有写错! 效果如图: 打印这部成功后,可以继续了,没有成功者,仔细检查,错误超出一百以上那肯定是头文件的问题. 这步很关键,没有定位,很难移动,几乎全是报错 这步也能首先打印初始化的坐标. 既然定位坐标的情况已经做好,是不

14-高效求最长公共子序列(二维数组存不下)

/*                                   See LCS again时间限制:1000 ms  |  内存限制:65535 KB难度:3 描述 There are A, B two sequences, the number of elements in the sequence is n.m; Each element in the sequence are different and less than 100000. Calculate the length

java基础:java中的二维数组

二维数组的概念: 一个元素为一维数组的数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的元素有多少个. 注意: A:以下格式也可以表示二维数组 a:数据类型 数组名[][] = new 数据类型[m][n]; b:数据类型[] 数组名[] = new 数据类型[m][n]; B:注意下面定义的区别 int x; int y; int x,y; int[] x; int[] y[]; int[] x,y[

二维数组

int[][]arr; arr=new int[5][6];//定义二维数组 int [][]grade=new int [5][6]//直接定义 for each循环:不使用下表就能访问: int=[]mum={12345} for(int a :m){ System.out.print(a)}  //num数组  a 12345;