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;}