当我们想要宣告一个变数的时候,我们可以一次叫一个
像是这样
#include<iostream>
using namespace std;
int main(){
int numberA = 0;
int numberB = 10;
int numberC = 89;
int numberD = 19;
cout << numberA + numberB << " " << numberB + numberC << " " << numberC + numberD;
}
虽然说这样宣告,还不太累,但是如果今天有一大串数字(可能 500 个整数),我们总不可能一个一个来宣告吧。
所以,这时候阵列就派得上用场了。
阵列可以把他想成矩阵
在矩阵中有一维矩阵、二维矩阵、三维矩阵
一维矩阵 就像是一串数列:
[1, 2, 3 ,4 ,5 ,6 ,7 ,8 ]
二维矩阵就像是一面棋盘:
三维矩阵....有点难解释,可以把它想像成是由很多二维矩阵叠起来组成一个很大的柜子:
阵列就跟矩阵式一模一样的,但只是他把这些数字转换到电脑里面,以电脑里面的方式去运作。
在C++中,我们要如何宣告一个一维阵列呢?
非常简单
公式如下:
*data type array name* [*number of elements*]
所以一个简单的例子:
int score[4] = {0, 56, 60, 90};
这样子就可以宣告一个阵列了
但是有没有注意到一件事
宣告一个阵列的时候,同时也会宣告这个阵列的资料型态:
所以拿上面的阵列 score 来举例
他的资料型态就是 int,且总共是由 10 个 int 所组成。
!!!注意注意!!!
在阵列里面,编码会从 0 开始一直到你宣告的数量(n) - 1为止。
所以我们拿上面那个 score 举例,如果今天我们要叫出 score 中的第1项还有第3项怎麽办?
要这样做:
cout << score[0] << " " << score[2];
但是,如果今天我们想要取出每一项阵列的元素要怎麽办?
这时候,我们就会搭配loop 来使用 :
例如:
#include<iostream>
using namespace std;
int main()
{
int score[4] = {0, 56, 60, 90};
for (int i = 0;i < 4; i++)
cout << score[i] << " ";
}
这样就可以利用 for loop 来印出阵列中的每一项了。
你知道阵列会爆炸吗?
如果你今天让一个大小只有 5 个 int 的一维阵列,做超过其他的事情,他很可能会告诉你 Runtime error
这是为什麽?
那我们必须了解一下阵列的运作方式:
在我们宣告一个一维阵列之後,像这样:
int anArray[4] = {0};
记忆体会给予这个阵列一段空间 像是这样:
【宣告阵列的记忆体】
Address | Identifier | Value |
---|---|---|
0x20c648 | score[0] | 0 |
0x20c64c | score[1] | 0 |
0x20c650 | score[2] | 0 |
0x20c654 | score[3] | 0 |
在这边有没有发现一个神奇的东西,就是在记忆体里面的地址 (起始位置)
其实就是 16 进位的表示方式喔 !
另外还有没有发现一件蛮奇怪的事情?
就是为什麽明明 score[0] 跟 score[1] 只差了1,但是他们记忆体的地址却不只有加1? 还跑出了一个莫名其妙的 c
???
这是因为阿,我们宣告的阵列是 int
所以代表阵列里面的每一项都是一个 int
在前面几天我稍微介绍了 int 会占据记忆体 4 byte
所以我们可以来数一下 :
先不管前面都长得一样的数字 (0x20c)
score[0] → 648
因为这个int 占据了 4 个 byte (也就是说中间经过了8 9 a(10) b(11))
所以理所当然,下一个 int 的起始位置就会是 64c 了!
score[1] → 64c
这边同理,因为经过了四个 (c(12) d(13) e(14) f(15))
所以下一个就会进位,最小的位置就会回到 0
score[2] → 650
了解了阵列的运作方式,可以了解到 阵列变数就是一段 address
所以当你做这件事情的时候:
int Array0 = {0};
cout << Array0;
会得到一串奇怪的数字像是这样0x6ffe10
其实就是印出了这一个阵列的 起始位置
那讲了那麽久,怎麽还没爆?
好啦其实他也不是真的会爆炸,只是会跑出我们都无法预测的结果而已
例如:
#include<iostream>
using namespace std;
int main()
{
int Array0[2] = {0};
for(int i = 0; i < 10; i++)
cout << Array0[i] << endl;
return 0;
}
如果我们只有宣告一个长度只有2的一维阵列,但是又做出超过2的事情会怎样?
我自己的电脑跑出来的结果是长这样,但是在每个人的电脑里面长的又不太一样。
0 0 1 3 11473824 0 4199400 0 0 0
这是因为,原本那些地址上就已经存在了其他资料没有被删掉,而我们刚好取到了我们没有宣告的地方,所以跑出了这些不知道在哪里存取的资料。
最近在查资料的时候,有时候原本很不想查,想要直接问人,毕竟当伸手牌最快嘛
但是後来想了想,还是自己GOOGLE了,因为我认为自己查到的东西才会记得更久也更深刻
<<: Day 11【连动 MetaMask - Pop Up & Login Detection】Can`t use current password.
接着我们要做的是打开 menu hamberger 後的 full screen modal,里面包...
1.建立一个新的React 专案 npx create-react-app first-app cd...
您是否在使用Windows 10时是否出现系统错误?或者您的Windows 10变得反应太慢?您是否...
使用 React useState Hook 创建数字时钟 import React, {useSt...
mysqli_num_rows() 取得查询笔数 可以使用 mysqli_num_rows() 函式...