1.定义指针指向二维数组
为了方便根据用户输入动态定义二维数组的行和列,引入变量rowsNum(行),colsNum(列)。
以定义5行4列的二维数组为例,
int rowsNum = 4;
int colsNum = 5;
float** a = new float*[rowsNum];
for(int i = 0; i < rowsNum; i++)
{
a[i] = new float[colsNum];
}
示意图如下:
2.二级指针内存的释放
二级指针内存的释放与内存的申请类似,具体代码如下:
for(int i = 0; i < rowsNum; i++)
{
delete[] a[i];
}
delete []a;
注意:程序在执行完相关功能后应该释放申请过的内存。虽然程序结束时操作系统会自动清除,但对于需要长时间运行的程序来说,如果不及时释放内存的话,程序的运行效率会越来越低,严重甚至占用完大部分系统内存,影响其他程序的运行。
3.举例
例子中展示了指针指向一维数组,指针指向二维数组的用法。
#include <iostream>
using namespace std;
void Test(float** a, float* b, const float* c){
b[0] = c[0] - 1;
b[1] = c[1] - 1;
a[0][0] = b[0] + c[0];
a[0][1] = b[0] - c[0];
a[0][2] = b[0] * c[0];
a[0][3] = b[0] / c[0];
a[1][0] = b[1] + c[1];
a[1][1] = b[1] - c[1];
a[1][2] = b[1] * c[1];
a[1][3] = b[1] / c[1];
}
int main(){
int rowsNum = 2;
int colsNum = 4;
float** a = new float*[rowsNum];
for(int i = 0; i < rowsNum; i++)
{
a[i] = new float[colsNum];
}
float* b = new float[2];
float cbase[2] = {1.5, 1.2};
float* c = cbase;
Test(a, b, c);
cout << "a:" << endl;
for(int i = 0; i < rowsNum; i++)
{
for(int j = 0; j < colsNum; j++)
{
cout << a[i][j]<< " ";
}
cout << endl;
}
cout << "b:" << endl;
for(int j = 0; j < 2; j++)
{
cout << b[j]<< " ";
}
cout << endl;
cout << "c:" << endl;
for(int j = 0; j < 2; j++)
{
cout << c[j]<< " ";
}
for(int i = 0; i < rowsNum; i++)
{
delete[] a[i];
}
delete []a;
delete []b;
return 0;
}