C/C++: 指针数组、数组指针、定长数组

来源:互联网 发布:ros bumper Python 编辑:程序博客网 时间:2024/05/21 11:23

题记:基本功要扎实。

 

一. 指针数组

array of pointers: 用于存储指针的数组,即数组元素都是指针;

int *a[4] = *(a[4]): 表示数组a4个元素,每个元素都是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]; }

1 0