memcpy
作用: Copy block of memory
用法:memcpy(指向destination的指標, 指向source的指標, 要copy幾個byte)
用法:memcpy(指向destination的指標, 指向source的指標, 要copy幾個byte)
new
作用:C++動態配置記憶體
介紹:依所指定之型別與陣列大小配置一塊等大的記憶體
可以為其設定初值
return 該塊記憶體的起始位址
通常需要一指標來接收回傳值,以存取所配置的記憶體空間
格式:
變數型別* 指標 = new 變數型別; //不指定初值
變數型別* 指標 = new 變數型別(初始值); //指定初值
變數型別* 指標 = new 變數型別(初始值); //指定初值
變數型別 *指標名 = new 變數型別[陣列長度]; //一維陣列
//多維陣列
變數型別 (*指標名)[陣列長度2] = new 變數型別[陣列長度1] [陣列長度2];
變數型別 (*指標名)[陣列長度2] [陣列長度3]= new 變數型別[陣列長度1][陣列長度2] [陣列長度3];
//多維陣列
變數型別 (*指標名)[陣列長度2] = new 變數型別[陣列長度1] [陣列長度2];
變數型別 (*指標名)[陣列長度2] [陣列長度3]= new 變數型別[陣列長度1][陣列長度2] [陣列長度3];
ex: int *p3 = new int[10];
double (*p4)[4] = new double[3][4];
double (*p5)[4][5] = new double[3][4][5];
double (*p4)[4] = new double[3][4];
double (*p5)[4][5] = new double[3][4][5];
因為memcpy只能複製連續記憶體,所以要自製具有連續記憶體的動態陣列 see here
template < typename T >
T **Allocate2DArray( int nRows, int nCols){
T **pp;
T *p;
T *curPtr;
T **Allocate2DArray( int nRows, int nCols){
T **pp;
T *p;
T *curPtr;
//(step 1) 宣告一個指標陣列的空間,內容指向元素陣列 each row 的開頭。pp指向指標陣列的起始位置。
pp = new T*[nRows];
pp = new T*[nRows];
//(step 2) 宣告一個元素陣列的空間。p指向元素陣列起始位置。
p = new T [nRows * nCols];
p = new T [nRows * nCols];
//(step 3) 將指標陣列裡的指標,指向元素陣列的正確位置。
curPtr = p;
for( int i = 0; i < nRows; i++){
*(pp + i) = curPtr;
curPtr += nCols;
}
return pp;
}
curPtr = p;
for( int i = 0; i < nRows; i++){
*(pp + i) = curPtr;
curPtr += nCols;
}
return pp;
}
template < typename T >
void Free2DArray(T** Array){
delete [] *Array;
delete [] Array;
}
void Free2DArray(T** Array){
delete [] *Array;
delete [] Array;
}
使用
型態 **變數名稱 = Allocate2DArray<型態> ( 行數, 列數 )
例:double **A = Allocate2DArray<double> ( 5, 7 ); //宣告5列7行的 double 二維陣列
Free2DArray ( 變數名稱 )
例:Free2DArray(A);
可以像一般陣列一樣assign值
例:A[2][5] = 0.5
文章標籤
全站熱搜
