Double pointer can be used to point to two dimensional matrix (pointer-to-pointer). If there are more than one matrices and it is required to keep track of these matrices then an additional extra pointer will be required. At his point triple-pointers can be used to point to list of two dimensional matrices.
We assume that you have got three different two-dimensional matrices as in the below picture:
Triple pointer with size of 3 and pointing to 3 different matrices:
#include <QCoreApplication>
#include <iostream>
using namespace std;
//function prototype
int** initializeMatrix(int** tempMatrix, int row, int column, int matrixCellValue);
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int size = 3;
int*** triplePointer;
//Allocate memory for triplePointer
triplePointer = new int**[size];
int rowNum = 4;
int columnNum = 3;
int** newMatrix = 0;
//Assign elements to cell values of each matrix
for(int i=0; i<size; i++)
triplePointer[i] = initializeMatrix(newMatrix,rowNum,columnNum,i);
//Print elements of allocated matrices
for(int num = 0; num<size; num++) {
for(int i=0; i<rowNum; i++) {
for(int j=0; j<columnNum; j++) {
cout<<triplePointer[num][i][j];
}
cout << "\n";
}
cout << "\n";
}
return a.exec();
}
/*
tempMatrix: matrix to allocate
row: number of rows of the matrix
column: number of columns of the matrix
matrixCellValue: value to assign to specified cell of matrix
*/
int** initializeMatrix(int** tempMatrix, int row, int column, int matrixCellValue)
{
tempMatrix = new int*[row];
for(int i=0; i<row; i++)
tempMatrix[i] = new int[column];
for(int i=0; i<row; i++)
for(int j=0; j<column; j++)
tempMatrix[i][j] = matrixCellValue;
return tempMatrix;
}
Sample c++ console application built with qt-creator on ubuntu and the console-output is 3 different 2x2 matrices displayed. Same output is produced when built with MSVS2008 on winXP.
