Lo que haces aqui es un pasaje por puntero, porque la verdad es que
char nom[][30] es un puntero.
No creo que se puede pasar un array por referencia direcamente, hay que pasar por una clase/structura:
Código:
struct MyArray
{
char[10][20] array;
};
void function ( MyArray & myArray ) // eso es un pasaje por referencia
{
myArray.array[pos_max][j] = myArray[faux][j];
//...
}
Pero pasar un objeto por referencia es mas o menos la misma cosa que por puntero, en el sentido que si modificas la variable en la funcion, los cambios van a quedar por siempre.
Para que no se altere el vector, no hay otra manera que hacer una copia (si no haces una copia, vas a trabajar siempre en la misma zona de memoria). Y cuando se pasa un parametro por valor, hay una copia "escondida" que se hace:
Código:
void function ( MyArray & myArray ) // eso es un pasage por valor
{
/// codigo, lo que sea;
}
main()
{
MyArray myArray; // declaracion de un objeto de tipo MyArray
function( myArray ); // aqui, antes de llamar a function, el compilador hace una copia de myArray, y es esta copia que esta utilizada en la funcion, de manera que el objeto initial no sera alterado
}
Eso es con un objeto/estructura, pero no se como se hace directamente con un "C-style array". Este tipo de array no se usa todavia en c++.