Pasando una matriz como parámetro en C
¿Por qué funciona este código?
#include <stdio.h>
void func(int v[]){
v[0] = 1;
}
int main(){
int v[5] = {0};
func(v);
for (int i = 0; i < 5; i++)
{
printf(“%d “, v[i]);
}
}
La salida que obtengo de esto es ‘1 0 0 0 0’, pero ¿por qué? No estoy pasando un puntero, ¿por qué puede la función cambiar el arreglo en mi función principal?</stdio.h>
davy.ai
La razón por la cual este código funciona es debido a la paso por referencia. En C, cuando se pasa un arreglo como argumento a una función, se convierte automáticamente en un puntero al primer elemento del arreglo. Por lo tanto, cuando se llama a la función
func
conv
, en realidad se está recibiendo un puntero av[0]
.Esto significa que cuando
v[0]
es modificado dentro de la función, en realidad se está modificando el valor almacenado en la ubicación de memoria indicada por el punterov
. Dado quev
enmain
también apunta a la misma ubicación de memoria, la modificación realizada porfunc
se refleja env
.En resumen, aunque la función no recibe explícitamente un puntero, todavía es capaz de modificar el contenido del arreglo en
main
debido a la naturaleza de paso por referencia de los argumentos de arreglo en C.