A continuación se muestra un fragmento del libro C Programación Solo las preguntas más frecuentes. ¿No está mal, ya que las matrices nunca se pueden pasar por referencia?Pase una matriz a una función por valor
VIII.6: ¿Cómo se puede pasar una matriz a una función por valor?
Respuesta: Una matriz se puede pasar a una función por valor declarando en la función llamada el nombre de la matriz con corchetes (
[
y]
) unidos al extremo. Cuando llame a la función , simplemente pase la dirección de la matriz (es decir, el nombre de la matriz) a la función llamada. Por ejemplo, el siguiente programa pasa a la matrizx[]
a la función llamadabyval_func()
por valor:El parámetro
int[]
le dice al compilador que la funciónbyval_func()
tendrá un argumento- una matriz de enteros. Cuando la funciónbyval_func()
se llama, que pasa la dirección de la matriz abyval_func()
:byval_func(x);
Debido a que la matriz se pasa por valor, una copia exacta de la matriz es hizo y se coloca en el apilar. La función llamada recibe esta copia de la matriz y puede imprimirla. Debido a que la matriz pasada a
byval_func()
es una copia de la matriz original, modificando la matriz dentro de la funciónbyval_func()
tiene ningún efecto sobre la matriz original.
Esto es cierto para las estructuras: puede pasarlas por valor (sobre la pila) o por referencia, pero no para las matrices. – sinelaw
Esto está en un libro sobre C, ¿verdad? Veo que data de 1995, pero esto ya estaba completamente mal entonces. –
Si eso es lo que dice en el libro, tiene que descartar el libro, contiene información errónea sobre un problema básico y quién sabe qué otra información errónea sobre qué otros asuntos. El último párrafo citado es absurdo: si modifica la matriz en la función llamada, también está modificando la matriz en la función de llamada, porque las matrices no se pasan por valor en C. –