C | Conceptos básicos del puntero | Pregunta 17 – Part 1

#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

Cuestionario de esta pregunta

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *