Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

94
Vistas
Reutilización de variables en la lista de parámetros de funciones
int doSomething(int n, int arr[n])

Lo que me confunde aquí es la reutilización de la variable n dentro de la lista de parámetros. ¿Alguien puede explicar por qué esto es válido y cuáles son los casos de uso?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

C permite varias sintaxis para pasar un puntero de matriz, que incluyen:

 int* arr, int arr[] or int arr[10]

Sin embargo, TODOS estos son equivalentes al primero, es decir, el compilador solo ve un puntero int y no usa ningún tamaño que se haya especificado en los corchetes de la matriz para imponer la integridad en el tamaño de la matriz pasada. En todos los casos anteriores, el compilador generará:

 void __cdecl foo(int * const)

La única forma de especificar el tamaño de una matriz es, como lo ha hecho, pasar un parámetro separado que indique el tamaño/longitud de la matriz.
En el ejemplo que cita, el compilador no usa la n en arr[n] para mantener la integridad en los límites de la matriz; en el ejemplo, solo se incluye como una indicación de que el primer parámetro es el tamaño. Una forma menos controvertida del mismo código podría ser simplemente afirmar eso de manera más explícita:

 int doSomething(int arr_len, int arr[])

En términos de cuál es la mejor convención o preferencia para pasar un puntero y su tamaño de matriz, consulte esta pregunta .

over 4 years ago · Santiago Trujillo Denunciar

0

Es válido.

Para este caso específico es equivalente a:

 int doSomething(int n, int arr[]); int doSomething(int n, int *arr);

porque los parámetros de la matriz se transforman automáticamente en punteros a los elementos de la matriz. En general, existen algunas diferencias entre las declaraciones de parámetros de tipo matriz y de puntero. Ver enlace para más detalles.

En mi opinión, el mejor uso debería ser:

 int doSomething(int n, int arr[static n]);

Este static n le dice a los compiladores que al menos n punteros de elementos por arr son válidos. Además, hace que la declaración sea visualmente diferente de una declaración de matriz, lo que ayuda a evitar problemas sorprendentes cuando se usa sizeof arr .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda