Эти операторы
ppst2_D = new st2_D * [rows]
for(uint32_t var = 0; var < rows; var++) ppst2_D[var] = new st2_d[cols]
создают одномерный массив указателей на тип st2_D.А затем rows
создаются одномерные массивы типа ppst2_D [var].
Вы можете использовать любой из индексов, как с обычными двумерными массивами, как, например,
ppst2_D[i][j]
ИлиВы можете использовать, например, арифметику указателей, например,
*( *( ppst2_D + i ) + j )
или даже их комбинации, например,
( *( ppst2_D + i ) )[j]
или
*( ppst2_D[i] + j )
Вот примерпрограмма.
#include <iostream>
#include <iomanip>
int main()
{
size_t n = 5;
int **a = new int *[n];
for ( size_t i = 0; i < n; i++ )
{
a[i] = new int[n];
}
for ( int **p = a; p != a + n; ++p )
{
for ( int *q = *p; q != *p + n; ++q )
{
*q = q - *p + ( p - a ) * n;
}
}
for ( size_t i = 0; i < n; i++ )
{
for ( size_t j = 0; j < n; j++ )
{
std::cout << std::setw( 2 ) << a[i][j] << ' ';
}
std::cout << '\n';
}
for ( size_t i = 0; i < n; i++ )
{
delete [] *( a + i );
}
delete [] a;
return 0;
}
Его вывод
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24