(七十八)嵌套和二维数组

例如int a[5]是一维数组,他是由a[0]、a[1]、a[2]、a[3]、a[4]这五个int类型的数组组成的。

 

如果放到excel里面,那么就是:


a[0]


a[1]


a[2]


a[3]


a[4]

 

这样一个样子,一维表示线。

一维数组的表示方法可以理解为:

变量名[横坐标x]

x初始为0,表示原点

 

假如表格从线到面,就升格为二维。

二维数组的的特点是既有横坐标,又有纵坐标。声明格式为:

int 变量名[纵坐标y][横坐标x]

表示每行有x个元素,每列有y行。

例如int 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]

 

注意:之所以这么写,是因为在初始化的时候,先初始化第0行(实际上的第一行),再初始化第1行,再初始化第2行等。

 

二维数组可以这么理解;

先有数组a[x],然后这个数组里就有x个元素;

然后在数组a[x]的基础上,由y个a[x]数组组成的a[y][x]数组,于是就有a[y][x]——相当于是双重数组,第一个数组有4个成员,第二个数组有3个成员(且这3个成员每个都有4个成员);

 

假如分别初始化a[0]={}; 中括号里面的0,指的是y坐标,因此初始化的是第y+1行上的x坐标成员

 

例如将int a[3][4]进行初始化的代码如下:

//初始化二维数组
#include<iostream>
int main()
{
	using namespace std;
	double a[3][4] =
	{
		{0.0,0.1,0.2,0.3},	//第一行,注意,一行以大括号包围,大括号以逗号为结尾。
		{1.0,1.1,1.2,1.3},	//之所以以逗号为结尾,是因为数组成员之间以逗号为间隔,
		{2.0,2.1,2.2,2.3},	//若将一个大括号内的4个元素整体看做一个大数组的成员,那么这个大数组有三个成员
	};
	cout << "a[0][0] = " << a[0][0] << endl;	//输出大数组第一个成员中(第一行)的小数组第一个成员(第一列)
	cout << "a[0][1] = " << a[0][1] << endl;	//输出大数组第一个成员中(第一行)的小数组第二个成员(第二列)
	cout << "a[1][0] = " << a[1][0] << endl;	//第二行,第一列
	cout << "a[2][3] = " << a[2][3] << endl;	//第三行,第四列
	system("pause");
	return 0;
}

输出:

a[0][0] = 0
a[0][1] = 0.1
a[1][0] = 1
a[2][3] = 2.3
请按任意键继续. . .

总结:

①我觉得可以将二维数组理解为一个excel表格,只不过excel表格的初始横纵坐标都是1,而二维数组的初始横纵坐标是0。

 

②坐标输出是先横行,再纵列——先横后竖。

 

③二维数组不仅支持int类型,也支持double类型,可以推断,也会支持char、string类型等。

代码:

//验证二维数组支持string类型
#include<iostream>
#include<string>
int main()
{
	using namespace std;
	string a[3][4] =
	{
		{"八","一","六","上"},
		{"三","五","七","中"},
		{"四","九","二","下"},
	};

	cout << "a[0][0] = " << a[0][0] << endl;	//输出大数组第一个成员中(第一行)的小数组第一个成员(第一列)
	cout << "a[0][1] = " << a[0][1] << endl;	//输出大数组第一个成员中(第一行)的小数组第二个成员(第二列)
	cout << "a[1][0] = " << a[1][0] << endl;	//第二行,第一列
	cout << "a[2][3] = " << a[2][3] << endl;	//第三行,第四列
	system("pause");
	return 0;
}

输出:

a[0][0] = 八
a[0][1] = 一
a[1][0] = 三
a[2][3] = 下
请按任意键继续. . .

④因为有二维数组,可以推断也有三维数组,或许也有四维数组。

格式类似,即 类型名 变量名[z][y][x]。然后每一个数组初始化结束后,用大括号括起来。

代码:

//验证有三维数组
#include<iostream>
#include<string>
int main()
{
	using namespace std;
	int a[2][3][4] =	//a[z][y][x]
	{
		{	//是z坐标第一面
			{000,001,002,003},	//y坐标第一行中的x坐标第1~4个
			{010,011,012,013},	//y坐标第二行
			{020,021,022,023},
		},	//以逗号结尾,因为可以把a[y][x]看成一个更大的数组中的一个成员
		{	//z坐标第二面
			{100,101,102,103},
			{110,111,112,113},
			{120,121,122,123},
		},
	};

	cout << "a[0][0][0] = " << a[0][0][0] << endl;	//输出z=0,y=0,x=0——注:=0为第一行,依次类推
	cout << "a[0][0][1] = " << a[0][0][1] << endl;	//输出z=0,y=0,x=1
	cout << "a[1][1][0] = " << a[1][1][0] << endl;	//输出z=1,y=1,x=0
	cout << "a[1][2][3] = " << a[1][2][3] << endl;	//输出z=1,y=2,x=3
	system("pause");
	return 0;
}

输出:

a[0][0][0] = 0
a[0][0][1] = 1
a[1][1][0] = 110
a[1][2][3] = 123
请按任意键继续. . .

⑤假如二维/三维数组的值是有规律的,例如跟三维坐标有关,于是可以利用for来给数组赋值:

代码:

#include<iostream>
#include<string>
int main()
{
	using namespace std;
	int a[2][3][4];	//a[z][y][x]
	int x = 0, y = 0, z = 0;

	for (z = 0;z < 2;z++)
	{
		for (y = 0;y < 3;y++)
		{
			for (x = 0;x < 4;x++)
			{
				a[z][y][x] = z * 100 + y * 10 + x;
			}
		}

	}
	//逻辑是先判断z,然后判断y,然后判断x,这个时候,三个坐标都有确切数组了,于是根据算法,a[z][y][x]就有确切数值了
	cout << "a[0][0][0] = " << a[0][0][0] << endl;	//输出z=0,y=0,x=0——注:=0为第一行,依次类推
	cout << "a[0][0][1] = " << a[0][0][1] << endl;	//输出z=0,y=0,x=1
	cout << "a[1][1][0] = " << a[1][1][0] << endl;	//输出z=1,y=1,x=0
	cout << "a[1][2][3] = " << a[1][2][3] << endl;	//输出z=1,y=2,x=3
	system("pause");
	return 0;
}

输出和未使用for的是一样的

时间: 2024-11-01 16:08:54

(七十八)嵌套和二维数组的相关文章

C语言中:二维数组能否作为函数参数,如何定义?

问题描述 C语言中:二维数组能否作为函数参数,如何定义? 二维数组能否作为函数的参数进行单独的定义和使用?将?个二维数组的行和列交换,存储到另外一个数组中去,该如何定义函数实现呢? 解决方案 C语言中,数据名做函数的参数后,会退化为指针.没有必要使用指向指针的指针,使用指针就可以了:另外,将是几维数组.和每一维的大小也做为参数传入函数就可以的. 解决方案二: 可以作为函数参数传,但一般不这样做,一般传的是 指向该二维数组的指针~ 解决方案三: 二维数组作为函数参数(C语言)C/C++ 二维数组作

Lua中使用二维数组实例

  这篇文章主要介绍了Lua中使用二维数组实例,本文直接给出代码实例,看代码更容易理解,需要的朋友可以参考下 在Lua中跟JS也是一样,没有二维数组的概念,但是二维数组对我们的开发又是极其的重要,当然,使用很多啦.谈谈在Lua中如何使用二维数组? 原理,一维数组里面给一个嵌套就是二维数组了,好,就那么简单,看看代码更容易理解 最近在做一个项目,如下是部分代码 ? 1 2 3 4 5 6 7 8 for i=1,10 do self.startMartix[i]={} self.star[i]={

Lua中使用二维数组实例_Lua

在Lua中跟JS也是一样,没有二维数组的概念,但是二维数组对我们的开发又是极其的重要,当然,使用很多啦.谈谈在Lua中如何使用二维数组? 原理,一维数组里面给一个嵌套就是二维数组了,好,就那么简单,看看代码更容易理解 最近在做一个项目,如下是部分代码 for i=1,10 do self.startMartix[i]={} self.star[i]={} for j=1,10 do self.startMartix[i][j]= starSprite self.star[i][j]=star_

c#如何把json转换为二维数组呢?

问题描述 [["2005-01-04","2150.000","2155.000","2142.000","2150.000","58792"],["2005-01-05","2131.000","2154.000","2127.000","2154.000","71172&qu

求助一道二维数组交换特定元素位置的算法题,谢谢大家!

问题描述 求助一道二维数组交换特定元素位置的算法题,谢谢大家! 刚试验了一下出了新问题- - 比如,一开始是左边的数组,我想"把2个0去掉,然后0上面的2就掉下来了",形成右边的新数组 然后我用了循环遍历,比如只看第二列,我的做法是"从下往上找,遇到0,就和0上面的数字交换",结果成了下面这个样子了- - 我有个改进想法是"还是从下往上找,遇到0之后判断上面的是不是0,如果是0,再继续向上再找,直到不是0,然后把这个数赋值给一开始那个0的位置",

二维数组怎么保存进app.config里边

问题描述 {{"06","89","26","74","81","74","15","22"},{"73","32","98","06","86","95","90","86"}}这样的二维

快速读取图片文件每一像素点颜色到二维数组!不要GetPixel!

问题描述 目前代码:DoUntily=jpgimage.Height'把图片读取到ptoall二维数组里DoUntilx=jpgimage.Widthptoall(x,y)=jpgimage.GetPixel(x,y)x=x+1Loopx=0y=y+1Loop jpgimage是bitmap类型,这样getpixel太慢了..有谁有更加快速的算法读取每一像素点rgb颜色到二维数组.. 解决方案 本帖最后由 gcyzzz 于 2014-12-28 22:01:41 编辑解决方案二:怎么破!!!解决

【急】c# COPY 二维数组的整行 到 一个一维数组 还有MEMORY RYCLE

问题描述 如何COPY二维数组的整行到一个一维数组还有MEMORYRYCLEobject[,]obj_=....;//这里obj_已经被实例化了.Dictionary<string,object[]>data=newDictionary<string,object[]>();data["First"]=newobject[28];//我想把obj_的每行COPY到data["First"]里,Array.Copy((object[])data

怎么将数据库中数据存入二维数组?

问题描述 数据表为test,有四列test1,test2,test3,test3.怎样将它们的数据调出存入一个二维数据,然后进行矩阵的运算.附上范例代码的,优先给分. 解决方案 解决方案二:先读到DataTable,再赋给二维数组.解决方案三:用楼上的方法解决方案四:个人认为,与其将数据库数据读入多维数组,不如新建一个对象,将其读入对象,更加直观.而且不受类型的限制.解决方案五:DataTableda=newDataTable();//这句自己写获得数据List<List<string>