题记:基本功要扎实。
一. 指针数组
array of pointers: 用于存储指针的数组,即数组元素都是指针;
int *a[4] = *(a[4]): 表示数组a有4个元素,每个元素都是int型的指针;
二. 数组指针(行指针)
a pointer to an array: 指向数组的指针
int (*p)[n]: ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。
(指针数组有用,数组指针没怎么用到,所以感觉理解的不是很好~ 之后用到的时候再补上)
三. 数组initialize - release
1. 一维数组
float *array; // 初始化为array[n]
// initialize
array = new float[n];
// release
delete [] array;
2. 多维数组
float ***array; // 初始化为array[n_1][n_2][n_3]大小
// initialize
array = new float**[n_1];
for (int i = 0; i < n_1; i++)
array[i] = new float *[n_2];
for (int j = 0; j < n_2; j++)
array[i][j] = new float [n_3];
// release
for (int i = 0; i < n_1; i++)
{ for (int j = 0; j < n_2; j++)
delete [] array[i][j];
delete [] array[i]; }
delete [] array;
float *farray[3]; // 二维指针数组,初始化为farray[3][m][n]
float **qarray[3]; // 三维指针数组,初始化为qarray[3][n]
// initialize
for (int i = 0; i < 3; i++)
farray[i] = new float [n];
for (int i = 0; i < 3; i++)
{ qarray[i] = new float *[m];
for (int j = 0; j < m; j++)
qarray[i][j] = new float [n]; }
// 使用memset初始化数组为零
for (int i = 0; i < 3; i++)
memset(farray[i], 0, n*sizeof(float));
for (int i = 0; i < 3; i++)
{ for (int j = 0; j < m; j++)
memset(qarray[i][j], 0, n*sizeof(float)); }
// release
for (int i = 0; i < 3; i++)
delete [] farray[i];
for (int i = 0; i < 3; i++)
{ for (int j = 0; j < m; j++)
delete [] qarray[i][j];
delete [] qarray[i]; }