La otra forma sería con punteros. Soy nuevo en esto, pero encontré por ahí una forma de pasar matrices bidimensionales a través de puntero. Aún me cuesta matrices así que lo que está en comentarios como "explicación" no sé si es valido, bueno aquí te lo dejo:
Código C++:
Ver original#include<iostream>
#include<stdio.h>
#include <stdlib.h>
using namespace std;
void muestra_matriz (int **matriz, int n)
{
for (int j=0; j<n; j++)
{
for (int i=0; i<n; i++)
cout<<matriz[i][j]<<'\t';
cout <<endl;
}
}
int main()
{
int n;
do {cout <<"Indique el orden de la matriz cuadrada (maximo 10): ";
cin>>n;}while (n<1);
int matriz [n][n], tmatriz[n][n];
cout <<"Introduzca los "<<n*n<<" valores de la matriz: ";
for (int j=0; j<n; j++) //almacena los valores introducidos
for (int i=0; i<n; i++)
cin>>matriz[i][j];
//Declaramos 2 punteros para asignarles los elementos del array
int count = 0;
int *punteroMatriz[n], *punteroTMatriz[n];
//matriz traspuesta
for (int j=0; j<n; j++)
for (int i=0; i<n; i++)
tmatriz[i][j]=matriz[j][i];
//Almacenamos referente a las "filas (que también contiene a las columnas)" la direccion de la matriz y tmatriz en el puntero.
while(count<n)
{
punteroMatriz[count] = matriz[count];
punteroTMatriz[count] = tmatriz[count];
count++;
}
//pasamos este puntero a la variable int **matriz
//En este caso pasamos la direccion de punteroMatriz a **matriz
//La cual apuntaria tanto a las filas o columnas del array.
muestra_matriz(punteroMatriz, n);
cout <<"La matriz traspuesta es: "<<endl;
muestra_matriz (punteroTMatriz, n);
return EXIT_SUCCESS;
}