關於c++動態陣列的一些粗淺見解
指標基礎
指標(pointer)這個概念有一點點抽象,大家很有可能在使用過程中被“ * ”這個解除引用操作符和“ & ”地址符的穿插使用搞混。記錄一下自己的學習內容,方便理解。
首先引入一個程式碼塊
int value = 1024;
int *p;
p = &value;
這樣應該非常直觀了,宣告一個變數value並將其初始化為1024,宣告一個int型指標p,將value對應的地址值賦給p。
在這個程式碼塊中,*p = value; p = &value;
直接宣告:
int valueB = 1024;
int *pb = &valueB;
Tips: int *pc == int* pc == int * pc; 間接引用:int number = *pc;
使用new分配記憶體
在執行階段給未命名的記憶體分配儲存值
typeName pointer_name = new typeName;
int pt = new int;
*pt = 1001;
記憶體使用完畢後需要使用delete來釋放記憶體。(必須為建立時記憶體的狀態,即增減後需要恢復為建立時的指標狀態)
delete pt;
一定要配對使用new 與 delete,否則會發生記憶體洩漏(memory leak)。
使用new建立動態陣列
int * ps = new int [20]; //通用格式: typeName pointer_name = new typeName [num_elements];
程式結束記憶體使用完畢後,同樣需要delete來釋放記憶體防止洩露。
delete [] ps; // 釋放整個陣列
使用動態陣列
double *p3 = new double [3];
double[0] = 0.3;
double[1] = 0.6;
double[2] = 0.9;
在這裡可以直接通過加減操作移動指標的位置。
p3 = p3 + 1;
這時指標會指向下一個元素的地址。