¿Hay alguna diferencia entre dos funciones en C?

void f1(int arr[]) {    
//some code...  
}
void f2(int arr[10]) {
//some code
}

¿Cuál será el tamaño de la primera matriz en la función f1?

5
Tony Stark 27 ene. 2016 a las 19:51

2 respuestas

La mejor respuesta

¿Hay alguna diferencia entre dos funciones en c?

Aquí no hay diferencia. Ambos serán interpretados como int *arr por el compilador ya que las matrices se convierten en un puntero a su primer elemento cuando se usan como un parámetro de función.

¿Cuál será el tamaño de la primera matriz en la función f1?

Estrictamente hablando, aquí no hay matriz. Su único puntero a un int. Si va a utilizar sizeof(arr), obtendrá un valor igual a sizeof(int *).

El tamaño de la matriz en los parámetros es necesario cuando el tipo de parámetro es un puntero a una matriz. en este caso, debe especificar el tamaño de la matriz, ya que cada tamaño hace que el puntero apunte a un tipo diferente.

void f3(int (*arr)[10]); // Expects a pointer to an array of 10 int
6
haccks 27 ene. 2016 a las 16:59

Cuando se pasa una matriz a una función, se convierte en un puntero al primer elemento de la matriz.

Así que esto:

void f1(int arr[])

Y esto:

void f1(int arr[10])

Y esto:

void f1(int *arr)

Son todas equivalentes. Son todos equivalentes.

De hecho, si pasó int a[20] a una función declarada para tomar int arr[10], gcc no se quejará.

3
dbush 27 ene. 2016 a las 16:57