上一篇介绍了一维阵列的用法还有如何宣告,今天就来介绍二维阵列
还有一些我们在写 code 时需要注意的一些小习惯。
[ Review ]
在上次,我们提到了,
我们在宣告阵列的时候,就像是在宣告一个阵列的初始位置。
像是这样:
int Array[10] = {0};
cout << Array;
结果就会跑出一段位於记忆体上面的位置。像是0x6ffe10
之类的
如果我们今天宣告一个阵列: 然後检查看看他的大小,可以更了解这个概念:
int Array[] = {1, 2, 3};
cout << sizeof(Array) << "\n"; // 就像是一栋大楼
cout << sizeof(Array[0]); // 就像是一栋大楼的第一户人家
这样第一行就会印出 12
。
第二行就会印出 4。
二维阵列的宣告就跟一维的差不多:
(列) (栏)
*data type* *array name* [ rows ] [ columns ];
就只是在列数的後面加上一个栏数
所以如果我们这样宣告:
int ArrayExample [3] [7];
如果把它图像化会长成这样:
其实可以想像成,有三个一维阵列,每一个阵列里面有 7 个项目(变数)
像这样:
[0] : [0][0] 、[0][1] 、[0][2] 、[0][3] 、[0][4] 、[0][5] 、[0][6] 。
[1] : [1][0] 、[1][1] 、[1][2] 、[1][3] 、[1][4] 、[1][5] 、[1][6] 。
[2] : [2][0] 、[2][1] 、[2][2] 、[2][3] 、[2][4] 、[2][5] 、[2][6] 。
如果我们今天要把资料输入进去的话,
可以先记得,排列的方式是长这样:
1.[0][0]
2.[0][1]
3.[0][2]
4.[0][3]
........
但为什麽不先换行再换列呢,像是这样
1.[0][0]
2.[1][0]
3.[2][0]
4.[3][0]
........
详细原因的话等等会说明。
例子:
int Array1[2][3] = {{4, 5, 6}, {7, 8, 9}};
int Array2[2][3] = {4, 5, 6, 7, 8, 9}
如果是这样子宣告的话,他的二维阵列示意图会长这样:
位置图是这样:
[0][0] [0][1] [0][2]
[1][0] [1][1] [1][2]
那如果是这样宣告:
int Array3[2][3] = {{4, 5}{7, 8, 9}}
画成示意图会长这样:
可以看到
[0][0] [0][1] [0][2]
[1][0] [1][1] [1][2]
在[0][2]
的地方变成了 0
,而我们在宣告的时候,因为第一列的数字只有宣告{4, 5}
,所以当最後一项并没有宣告数字,所以变成了原本存在於记忆体那个位置的数字 0
。
再下面这个例子中可以看到,
int Array4[2][3] = {4, 5, 6, 7, 8};
我们宣告了六个阵列变数的位置,但是只有给他五个数字,因此会得到:
这样子的结果,如果依照下面这张位置对比的话,就可以发现,他真的是按照
[0][0] → [0][1] → [0][2] → [1][0] → [1][1]
这个顺序下去,所以在最後一项会变成 0。
例如今天宣告一个 2*3
的阵列
int Array[2][3] = {0};
在记忆体里面,位置的排列是这样子:
正因为他是这样子排列,所以当你输入数字的时候,就会是依照这样的顺序输入。
那如果今天要输入一个二维阵列的时候要怎麽办呢?
其实很简单,用两个回圈就可以解决了。
int Array[3][5] = {0};
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 5; j++)
{
cin >> Array[i][j];
}
}
这样就可以把想要的数值输入到二维阵列里面去了。
如果不太懂两层回圈的,可以这样子想:
先从第一层开始想:
从 i = 0 开始 :
j = 0
j = 1
j = 2
j = 3
j = 4
接下来就会变成
i = 1:
里面又有
j = 0
j = 1
j = 2
j = 3
j = 4
以此类推。
曾经有一个厉害的人说过, "Always initialize your Variables"
现在已经变成我写程序的时候铭记在心的一句金句。
之前我们也提过,变数都要初始化,像是
double Variable1 = 0.5;
int Variable2 = 0;
long Variable3 = 1;
只要你宣告的时候,就要给他初始化一下。
那阵列呢,当然也要啦!
int Array1[6][7] = {0}; //这样子宣告的话就会每一项都是 0
先宣告一个 const,再宣告 array !
例如我们要宣告一个长度为 10 的 array
理论上我们要这麽做:
首先要先 allocate a const.
const int VALUE_LEN = 10;
再来才是宣告array的长度
float value[VALUE_LEN] = {0};
这样的好处是,如果你今天要改阵列的长度,可以直接从宣告的 const 改,这样就不用每一项都要
改改改改改了。
阵列不能互相宣告
像是
int a[5] = {0};
// RIGHT
// WRONGint b[5] = a;
阵列不能比大小或是拿来做运算啦
以上两点的原因,都是因为我们前天提到的: 我们所宣告的阵列只是一个位置,并不是一个值
所以就不能拿来运算、比大小、或者宣告啦 !
每次遇到回圈在乱搞的时候,其实慢慢的一圈一圈想,你的大脑可能会发展到不同层次。
<<: Python - PyEnchant 英文单字拼写检查套件参考笔记
>>: 【Day 09】Hook 的奇妙冒险 - Ring3 Hook
第12 届iT邦帮忙铁人赛系列文章 (Day29) 在上一篇我们用 Console App 发送讯息...
GitHub Repo https://github.com/b2etw/Spring-Kotlin...
Doc modification 今天又花了不少时间更新文件,主要是加入魔法的设定。为了要了解哪些魔...
写到最後三天了,想要聊聊和 Android 不完全相关的东西。感谢JetBrains 的开发,和 K...
最後就会形成下面这张图,左边工程师负责写类别并compile,右边负责写主程序并compiler,中...