#include <iostream>
//аргументом функции насамом деле
//является ссылка на массив, а не массив по значению
void Func(int array[][3])
{
std::cout<<"func starting...\n";
for(size_t n=0;n<4;++n)
{
for(size_t i=0;i<3;++i) { std::cout<< array[n][i]<<" "; }
std::cout<< "\n";
}
}
int main()
{
//сначала стандартный юзкейс двухмерных массивов
int a[][3] = { {1,2,3},{1,2,3},{1,2,3},{1,2,3} };
Func(a);
//эквивалентный массив, только я свным указанимем размерности
int b[4][3] = { {1,2,3},{1,2,3},{1,2,3},{1,2,3} };
Func(b);
//эквивалент для случая работы с динамической памятью
int* ptr = new int[4*3]; //выделяем на куче блок эквивалентный int[4][3]
//заполняем его теми же элементами, что и в случае с обычным двухмерным массивом
ptr[0] = 1; ptr[1] = 2; ptr[2] = 3; ptr[3] = 1; ptr[4] = 2; ptr[5] = 3; ptr[6] = 1;
ptr[7] = 2; ptr[8] = 3; ptr[9] = 1; ptr[10] = 2; ptr[11] = 3;
//приводим int* к типу указателя на двухмерный массив
int (*pAr)[4][3] = (int (*)[4][3]) ptr;
//приведение типа указетеля на двухмерный массив, к ссылке на двухмерный массив
int (&rAr)[4][3]= *pAr;
Func(rAr);
delete[] ptr;
//эквивалент для случая работы с динамической памятью, но без явного указания количества элементов
{
int* ptr = new int[4*3]; //выделяем на куче блок эквивалентный int[4][3]
//заполняем его теми же элементами, что и в случае с обычным двухмерным массивом
ptr[0] = 1; ptr[1] = 2; ptr[2] = 3; ptr[3] = 1; ptr[4] = 2; ptr[5] = 3; ptr[6] = 1;
ptr[7] = 2; ptr[8] = 3; ptr[9] = 1; ptr[10] = 2; ptr[11] = 3;
//приводим int* к типу указателя на двухмерный массив
int (*pAr)[][3] = (int (*)[][3]) ptr;
//приведение типа указетеля на двухмерный массив, к ссылке на двухмерный массив
int (&rAr)[][3]= *pAr;
Func(rAr);
delete[] ptr;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKLy/QsNGA0LPRg9C80LXQvdGC0L7QvCDRhNGD0L3QutGG0LjQuCDQvdCw0YHQsNC80L7QvCDQtNC10LvQtSAKLy/Rj9Cy0LvRj9C10YLRgdGPINGB0YHRi9C70LrQsCDQvdCwINC80LDRgdGB0LjQsiwg0LAg0L3QtSDQvNCw0YHRgdC40LIg0L/QviDQt9C90LDRh9C10L3QuNGOCnZvaWQgRnVuYyhpbnQgYXJyYXlbXVszXSkKewogICAgc3RkOjpjb3V0PDwiZnVuYyBzdGFydGluZy4uLlxuIjsKICAgIGZvcihzaXplX3Qgbj0wO248NDsrK24pCiAgICB7CiAgICAgICAgZm9yKHNpemVfdCBpPTA7aTwzOysraSkgeyBzdGQ6OmNvdXQ8PCBhcnJheVtuXVtpXTw8IiAiOyAgfQogICAgICAgIHN0ZDo6Y291dDw8ICJcbiI7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgLy/RgdC90LDRh9Cw0LvQsCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INGO0LfQutC10LnRgSDQtNCy0YPRhdC80LXRgNC90YvRhSDQvNCw0YHRgdC40LLQvtCyCiAgICBpbnQgYVtdWzNdID0geyB7MSwyLDN9LHsxLDIsM30sezEsMiwzfSx7MSwyLDN9IH07CiAgICBGdW5jKGEpOwoKICAgIC8v0Y3QutCy0LjQstCw0LvQtdC90YLQvdGL0Lkg0LzQsNGB0YHQuNCyLCDRgtC+0LvRjNC60L4g0Y8g0YHQstC90YvQvCDRg9C60LDQt9Cw0L3QuNC80LXQvCDRgNCw0LfQvNC10YDQvdC+0YHRgtC4CiAgICBpbnQgYls0XVszXSA9IHsgezEsMiwzfSx7MSwyLDN9LHsxLDIsM30sezEsMiwzfSB9OwogICAgRnVuYyhiKTsKCiAgICAvL9GN0LrQstC40LLQsNC70LXQvdGCINC00LvRjyDRgdC70YPRh9Cw0Y8g0YDQsNCx0L7RgtGLINGBINC00LjQvdCw0LzQuNGH0LXRgdC60L7QuSDQv9Cw0LzRj9GC0YzRjgogICAgaW50KiBwdHIgPSBuZXcgaW50WzQqM107IC8v0LLRi9C00LXQu9GP0LXQvCDQvdCwINC60YPRh9C1INCx0LvQvtC6INGN0LrQstC40LLQsNC70LXQvdGC0L3Ri9C5IGludFs0XVszXQogICAgCiAgICAvL9C30LDQv9C+0LvQvdGP0LXQvCDQtdCz0L4g0YLQtdC80Lgg0LbQtSDRjdC70LXQvNC10L3RgtCw0LzQuCwg0YfRgtC+INC4INCyINGB0LvRg9GH0LDQtSDRgSDQvtCx0YvRh9C90YvQvCDQtNCy0YPRhdC80LXRgNC90YvQvCDQvNCw0YHRgdC40LLQvtC8CiAgICBwdHJbMF0gPSAxOyBwdHJbMV0gPSAyOyBwdHJbMl0gPSAzOyBwdHJbM10gPSAxOyAgcHRyWzRdID0gMjsgcHRyWzVdID0gMzsgcHRyWzZdID0gMTsKICAgIHB0cls3XSA9IDI7IHB0cls4XSA9IDM7IHB0cls5XSA9IDE7IHB0clsxMF0gPSAyOyBwdHJbMTFdID0gMzsKCiAgICAvL9C/0YDQuNCy0L7QtNC40LwgaW50KiDQuiDRgtC40L/RgyDRg9C60LDQt9Cw0YLQtdC70Y8g0L3QsCDQtNCy0YPRhdC80LXRgNC90YvQuSDQvNCw0YHRgdC40LIKICAgIGludCAoKnBBcilbNF1bM10gPSAoaW50ICgqKVs0XVszXSkgcHRyOwoKICAgIC8v0L/RgNC40LLQtdC00LXQvdC40LUg0YLQuNC/0LAg0YPQutCw0LfQtdGC0LXQu9GPINC90LAg0LTQstGD0YXQvNC10YDQvdGL0Lkg0LzQsNGB0YHQuNCyLCDQuiDRgdGB0YvQu9C60LUg0L3QsCDQtNCy0YPRhdC80LXRgNC90YvQuSDQvNCw0YHRgdC40LIKICAgIGludCAoJnJBcilbNF1bM109ICpwQXI7CgogICAgRnVuYyhyQXIpOwoKICAgIGRlbGV0ZVtdIHB0cjsKCiAgICAvL9GN0LrQstC40LLQsNC70LXQvdGCINC00LvRjyDRgdC70YPRh9Cw0Y8g0YDQsNCx0L7RgtGLINGBINC00LjQvdCw0LzQuNGH0LXRgdC60L7QuSDQv9Cw0LzRj9GC0YzRjiwg0L3QviDQsdC10Lcg0Y/QstC90L7Qs9C+INGD0LrQsNC30LDQvdC40Y8g0LrQvtC70LjRh9C10YHRgtCy0LAg0Y3Qu9C10LzQtdC90YLQvtCyCiAgICB7CiAgICAgICAgaW50KiBwdHIgPSBuZXcgaW50WzQqM107IC8v0LLRi9C00LXQu9GP0LXQvCDQvdCwINC60YPRh9C1INCx0LvQvtC6INGN0LrQstC40LLQsNC70LXQvdGC0L3Ri9C5IGludFs0XVszXQogICAgICAgIAogICAgICAgIC8v0LfQsNC/0L7Qu9C90Y/QtdC8INC10LPQviDRgtC10LzQuCDQttC1INGN0LvQtdC80LXQvdGC0LDQvNC4LCDRh9GC0L4g0Lgg0LIg0YHQu9GD0YfQsNC1INGBINC+0LHRi9GH0L3Ri9C8INC00LLRg9GF0LzQtdGA0L3Ri9C8INC80LDRgdGB0LjQstC+0LwKICAgICAgICBwdHJbMF0gPSAxOyBwdHJbMV0gPSAyOyBwdHJbMl0gPSAzOyBwdHJbM10gPSAxOyAgcHRyWzRdID0gMjsgcHRyWzVdID0gMzsgcHRyWzZdID0gMTsKICAgICAgICBwdHJbN10gPSAyOyBwdHJbOF0gPSAzOyBwdHJbOV0gPSAxOyBwdHJbMTBdID0gMjsgcHRyWzExXSA9IDM7CgogICAgICAgIC8v0L/RgNC40LLQvtC00LjQvCBpbnQqINC6INGC0LjQv9GDINGD0LrQsNC30LDRgtC10LvRjyDQvdCwINC00LLRg9GF0LzQtdGA0L3Ri9C5INC80LDRgdGB0LjQsgogICAgICAgIGludCAoKnBBcilbXVszXSA9IChpbnQgKCopW11bM10pIHB0cjsKCiAgICAgICAgLy/Qv9GA0LjQstC10LTQtdC90LjQtSDRgtC40L/QsCDRg9C60LDQt9C10YLQtdC70Y8g0L3QsCDQtNCy0YPRhdC80LXRgNC90YvQuSDQvNCw0YHRgdC40LIsINC6INGB0YHRi9C70LrQtSDQvdCwINC00LLRg9GF0LzQtdGA0L3Ri9C5INC80LDRgdGB0LjQsgogICAgICAgIGludCAoJnJBcilbXVszXT0gKnBBcjsKCiAgICAgICAgRnVuYyhyQXIpOwoKICAgICAgICBkZWxldGVbXSBwdHI7CiAgICB9CiAgICAKICAgIHJldHVybiAwOyAKfQ==