¿Cómo puedo devolver más de un valor a través de la función en C?

En una entrevista me han preguntado cómo se puede devolver más de un valor desde la función. He respondido diciendo que usando punteros podemos lograr (llamar por referencia) esto en C. Luego me dijo que estaba buscando otra forma de devolver más de un valor. Dije que podemos devolver un objeto de estructura, pero aquí tampoco pareció impresionado.

Me gustaría conocer otras formas de devolver más de un valor desde una función.

He visto estas preguntas que se hacen aquí en SO, pero no pude encontrar nada C específico.

El problema difícil es que el entrevistador tiene alguna solución con la que están particularmente contentos, y probablemente te estén calificando según si tienes el mismo truco inteligente que ellos o no.

Solo puedes nombrar algunas formas como lo hiciste, y aun así no caer en su truco secreto. Y si supieras su truco secreto, bien no podrías estar impresionado con él.

Así que en estas situaciones, es para pasar de la entrevista a la conversación. Una vez que detecte que no se está moviendo hacia su ego, puede evitar dirigirse hacia el intimidante “No sé”, “Me rindo” y en su lugar probar el “así que, ¿tiene alguna solución inteligente? ¿Hay algún problema?” receta de la casa para esto en Xyz Inc? ” etc.

Cualquier vislumbre de su solución obviamente impresionada por sí mismo y usted está de vuelta en terreno firme donde puede hablar de ello y preguntarles si han pensado en varios factores que vienen a la mente y, básicamente, entrevistarlos.

¡Todo el mundo ama a un buen oyente, y hacer que hablen sobre sus trucos es una buena manera de que dejen la entrevista completamente impresionados con usted! 😉

Hay algunas maneras:

  1. Devuelva el valor utilizando la statement de retorno (como ya sabe)
  2. Regreso a través de referencias.
  3. Devuelve los valores a través del montón.
  4. Devolver valores a través de variables globales.

Eso depende de lo que consideres un valor . Si un valor es una información para usted, más valores podrían ser una estructura de valores. También se pueden pasar más valores a través de punteros o matrices, incluso un char* contiene una lista de valores ( alfanuméricos no cero). Si considera que un valor es un poco de información, un solo uint32_t devuelto puede contener 32 valores . Incluso puedes perder el tiempo con señales, sockets, tuberías o archivos.

Pero para usted ni siquiera conoce el caso de uso y los requisitos que impone a la solución, de hecho es una tarea bastante difícil encontrar la solución correcta (y en realidad se le ocurrieron algunas soluciones adecuadas …).

Devuelva un puntero a una estructura, o empaque varios tipos de datos pequeños en un tipo de datos grande, o use variables globales.
La primera es probablemente la forma más limpia de hacerlo, las otras dos podrían tener su uso en ciertas situaciones.

Si pasamos la dirección en lugar del verdadero valor de los parámetros.
Luego, cada vez que remitamos esos parámetros lo hacemos con la dirección.

devolver el puntero a la estructura es la respuesta adecuada. (Obviamente, el objective del progtwig puede decidir qué es lo mejor que se puede hacer). Es posible que el entrevistador haya querido que dijera “No sé”, lo que hubiera demostrado tu falta de confianza en el campo. Creo que proporcionaste buenas soluciones, aunque no lo que él tenía en mente. Podría haberle preguntado acerca de un escenario típico en el que deseaba que se devuelvan múltiples valores y luego discutir cómo struct-puntero es una alternativa razonable.