Как вы, наверное, сейчас знаете, из других ответов тип a
на самом деле не эквивалентен int**
- он jsut распадается на (при возврате / передаче по значению).
int (*b)[2] = a; // would solve that
Существует более C ++ способ:
typedef std::array<std::array<int, 2>, 3> M23;
void foo(M23& b)
{
b[1][1] = 1;
}
int main()
{
M23 a = {{1, 2}, {11, 12}, {21, 22}};
foo(a);
M23 d = a;
d[1][1] = 1;
}