А>Вот этот код не компилируется:

А>
#include "stdafx.h"

А>int matrix[2][2] =
А>{
А>    1, 2,
А>    3, 4
А>};

А>void test(int *pM)
А>{
А>    printf("%d", pM[1][0]); // error C2109
А>}

А>int _tmain(int argc, _TCHAR* argv[])
А>{
А>    test(matrix); // error C2664
А>    return 0;
А>}

А>

error C2109: subscript requires array or pointer type
А>error C2664: 'test' : cannot convert parameter 1 from 'int [2][2]' to 'int *'

А>Наверное, лет пять не работал с многомерными массивами. Вот теперь приспичило и на тебе... Подскажите, люди добрые, как это правильно делается?

Если все размеры массива фиксированы (кроме, может быть, самой первой), то так

void test(int (*pM)[2])
{
   printf("%d", pM[1][0]);
}


Если все размеры точно фиксированы, то можно еще так

void test(int (&M)[2][2])
{
   printf("%d", M[1][0]);
}


или так

void test(int (*pM)[2][2])
{
   printf("%d", (*pM)[1][0]);
}
Автор: Андрей Тарасевич    Оценить