陣列與動態配置記憶體
參考文件
建立陣列記憶體位址
資料型態 *陣列名 = new 資料型態[長度];
new傳回值是陣列第0筆元素記憶體位址,由指標(*陣列名)接收傳回的記憶體位址。
記憶體回收
delete[] 指標變數;
不能使用sizeof()
因為陣列名是指標,使用sizeof(陣列名)只會傳回8btye
程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
int main() {
//分配連續100個int的記憶體空間
int *arr_p = new int[100];
cout << "使用陣列索引:" << endl;
//使用索引修改陣列的元素
for (int i = 0; i < 100; i++) {
arr_p[i] = i;
}
//使用索引印出陣列的元素
for (int i = 0; i < 100; i++) {
cout << arr_p[i] << ",";
}
cout << endl;
cout << "使用指標:" << endl;
//使用指標修改陣列的元素
for (int i = 0; i < 100; i++) {
*(arr_p + i) = i + 100;
}
//使用指標印出陣列的元素
for (int i = 0; i < 100; i++) {
cout << *(arr_p + i) << ",";
}
cout << endl;
//陣列記憶體回收
delete[] arr_p;
//指標設為nullptr代表不指向任何記憶體位址
arr_p = nullptr;
return 0;
}
執行結果
使用陣列索引:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
使用指標:
100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,
陣列其它用法
全設為0
int *arr_p1 = new int[3]();
設定初始值
int *arr_p2 = new int[3]{1,2,3}; //1,2,3
程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main() {
//全設0
int *arr_p1 = new int[3](); // 0,0,0
//設初始值
int *arr_p2 = new int[3]{1,2,3}; //1,2,3
//用索引取值
cout << arr_p1[0] << "," << arr_p1[1] << "," << arr_p1[2] << endl;
//用指標取值
cout << *(arr_p2 + 0) << "," << *(arr_p2 + 1) << "," << *(arr_p2 + 2) << endl;
//記憶體回收
delete [] arr_p1;
delete [] arr_p2;
//指標設為不指向任何記憶體位址
arr_p1 = nullptr;
arr_p2 = nullptr;
return 0;
}
執行結果
0,0,0
1,2,3