Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

95
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!