если истинный двумерный массив имеется ввиду type[n][m] то так:
#include <iostream>
void revert(int* n)
{
for (int i = 0; i < 4; i++)
{
int tmp = n[i]; //простой свап через доп переменную
n[i] = n[8 + i]; //в одномерном виде тоже самое что n[0][i] = n[2][i]
n[8 + i] = tmp;
}
}
void print(int* n)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++) std::cout << n[i * 4 + j] << " "; //n[i*m + j] где m - кол-во столбцов, тоже что n[i][j]
std::cout << "\n";
}
}
int main()
{
int n[3][4] = { {1,2,3,4},{4,5,6,7},{7,8,9,0} }; //по факту одномерный
print(*n); // *n => передаем в функции как одномерный (по адресу первого элемента)
revert(*n);
std::cout << "\n\n";
print(*n);
}