2011-11-24 7 views
7

Me han preguntado en una entrevista cómo se puede devolver más de un valor de la función. He respondido diciendo que usando punteros podemos lograr (llamar por referencia) esto en C. Luego me dijo que está buscando otra forma de devolver más de un valor. Dije que podemos devolver un objeto struct pero aquí tampoco parecía impresionado.¿Cómo puedo devolver más de un valor a través de la función en C?

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

He visto estas preguntas en SO, pero no he encontrado nada C específico.

+0

A menos que el entrevistador haya querido matrices (pero solo se pueden devolver valores del mismo tipo) las estructuras y los punteros son la única forma de devolver varios valores. –

+0

El hecho de que el entrevistador no parezca impresionado con su respuesta de devolver una estructura (con múltiples valores en su interior) no significa que no sea una buena respuesta. Sí, hay otras formas, pero para C el ** retorno ** de una estructura es una buena respuesta. Sería bueno si pudieras "devolver" una matriz, pero en C lo mejor que puedes hacer es devolver un puntero, a diferencia de C++, donde puedes devolver 'std :: vector'. –

+0

"no pareció impresionado" ... simplemente no le impresionó, ¿o le dijo que estaba completamente equivocado y que no había respondido su pregunta? – Bart

Respuesta

27

El problema difícil es que el entrevistador tiene alguna solución que son particularmente feliz con en mente y lo más probable es que están calificando por si tiene el mismo truco inteligente como ellos o no.

Podrías nombrar algunas maneras como lo hiciste, y aún así no caer en su truco secreto. Y si conociera su truco secreto, no podría impresionarlo.

En estas situaciones, es pasar de la entrevista a la conversación. Una vez que detecta que no se está moviendo hacia su ego, puede evitar dirigirse hacia el intimidante "No sé", "Me rindo" y, en su lugar, probar el "¿Tiene alguna solución inteligente? la receta de la casa para esto en Xyz Inc? " etc.

Cualquier atisbo de su solución evidentemente autoimpuesta y estás de vuelta en un terreno firme donde puedes hablar sobre ello y preguntarles si han pensado en varios factores que te vienen a la mente y básicamente entrevistarlos.

Todo el mundo ama a un buen oyente, y hacer que hablen de sus trucos es una buena forma de conseguir que abandonen la entrevista totalmente impresionados contigo. ;)

+0

Excelente respuesta. Siempre tenga en cuenta que una entrevista técnica no se trata solo de temas técnicos. – wallyk

+4

¡La mejor respuesta indirecta! – MByD

+2

En las entrevistas, es muy importante hacer preguntas para aclarar las cosas, para convertir las preguntas/tareas abstractas y vagas en respuestas concretas/factibles. Del mismo modo, puede que te encuentres lidiando con restricciones demasiado duras y en ese momento es bueno pensar y preguntar si pueden relajarse, tal vez con algún otro gasto. Lo peor es hacer suposiciones incorrectas y ser incapaz de dar una buena respuesta o cualquier respuesta a causa de eso. Si el entrevistador se niega a proporcionar detalles, puede enumerar las posibilidades y resolverlas de forma independiente. Mostrará tu pensamiento. –

1

hay algunas maneras:

  1. Valor de retorno mediante la instrucción de retorno (como ya saben)
  2. retorno a través de referencias.
  3. Devuelve valores a través del montón.
  4. Devuelve valores a través de variables globales.
+0

pero ¿cómo puedo usar return statement para devolver más de un valor? –

+0

@AmitSinghTomar: el entrevistador probablemente se refería a un tipo general de "devolución" de algo porque en C puede devolver directamente solo un valor con 'retorno'. –

0

Devuelve un puntero a una estructura, o empaqueta varios tipos de datos pequeños en un tipo de datos grande, o usa variables globales.
La primera es probablemente la forma más limpia de hacerlo, las otras dos pueden tener su uso en ciertas situaciones.

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

1

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

Sin embargo, para que ni siquiera conoce el caso de uso y los requisitos que impone a la solución, es sin duda una tarea bastante difícil de alcanzar con la solución adecuada (y en realidad se qué llegar a algunas adecuada soluciones ...).

0

devolviendo un puntero a la estructura es la respuesta adecuada. (Obviamente, el objetivo del programa puede decidir qué es lo mejor que se puede hacer). El entrevistador podría haber querido que dijera 'No sé', lo que habría demostrado su falta de confianza en el campo. Creo que proporcionaste buenas soluciones, aunque no era lo que él tenía en mente. Podrías haberle preguntado sobre un escenario típico en el que quería que se devolvieran valores múltiples y luego discutir cómo struct-pointer es una alternativa razonable.

Cuestiones relacionadas