#include<stdio.h> void fun(int arr[]) { int i; int arr_size = sizeof(arr)/sizeof(arr[0]); for (i = 0; i < arr_size; i++) printf("%d ", arr[i]); } int main() { int i; int arr[4] = {10, 20 ,30, 40}; fun(arr); return 0; }
(A) 10 20 30 40
(B) Dependiente de la máquina
(C) 10 20
(D) Norte
Respuesta: (B)
Explicación: En C, los parámetros de array siempre se tratan como punteros. Entonces, las siguientes dos declaraciones tienen el mismo significado.
void fun(int arr[]) void fun(int *arr)
[] se usa para dejar en claro que la función espera una array, aunque no cambia nada. La gente lo usa solo por legibilidad para que el lector tenga claro el tipo de parámetro previsto. La conclusión es que nunca se debe usar sizeof para los parámetros de la array, se debe pasar un parámetro separado para el tamaño (o la longitud) de la array a fun(). Entonces, en el programa dado, arr_size contiene una proporción del tamaño del puntero y el tamaño del entero, esta proporción depende del compilador.
#include <stdio.h> void fun(int arr[], size_t arr_size) { int i; for (i = 0; i < arr_size; i++) printf("%d ", arr[i]); } int main() { int i; int arr[] = {10, 20 ,30, 40}; // Use of sizeof is fine here size_t n = sizeof(arr)/sizeof(arr[0]); fun(arr, n); return 0; }
Salida:
10 20 30 40
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA