La idea es hace una funcion que capture un caracter con getche(), si este es '.' entonces retorna, sino se llama a si misma, imprime el caracter y retorna
De esa forma cuando se ingrese el . se va a ir saliendo de las funciones:huh:
Personalmente, no usaría conio.h, pero eso ya es decisión de cada uno.
no me reconoció la librería conio.h, ni tampoco la función getche sino getchar
por cierto el system("pause") tampoco me jaló
solo una duda, si char solo tiene límite de un 1byte, ¿por qué me recibe una cadena larga de hasta 20 caracteres?Él usa Windows y tú al parecer no. Esas funciones no son estándar, de ahí mi comentario anterior:
Personalmente, no usaría conio.h, pero eso ya es decisión de cada uno.
solo una duda, si char solo tiene límite de un 1byte, ¿por qué me recibe una cadena larga de hasta 20 caracteres?Es un char local a cada llamda de función. Mientras la función no retorne, ese valor sigue almacenado en la pila temporal de la función. Si quieres entenderlo más en profundidad, tendría que explicarte cómo se implementan las funciones C en ensamblador, pero para ello tienes que saber un poco de arquitectura de computadores. Si te interesa me dices y te lo cuento.
[Es un char local a cada llamda de función. Mientras la función no retorne, ese valor sigue almacenado en la pila temporal de la función. Si quieres entenderlo más en profundidad, tendría que explicarte cómo se implementan las funciones C en ensamblador, pero para ello tienes que saber un poco de arquitectura de computadores. Si te interesa me dices y te lo cuento.
¿Lo que te refieres es qué el valor se guarda en el espacio almacenado para la función?Algo parecido. En realidad es un espacio que comparten la función que llama y la función llamada.
¿ ese espacio tiene límite?Por supuesto, la memoria no es infinita.
por que está definido como void (sin retorno) y no como un tipo de dato del C?No está definido como void
void inversa (char car)
Claro que también aceptaría unas clasesitas de como se implementan las funciones C en padre ensamblador..En IA32 (comúnmente llamada x86), el paso de argumentos a funciones se realiza a través de la pila. Esto es, se ponen en la pila los argumentos de la función en orden inverso a los declarados en C, usando la instrucción PUSH. En este caso, se pasa el char en la pila a inversa(). La función lo recupera con la instrucción POP. Acto seguido, inversa se llama a sí misma, con lo que inserta otro char en la pila usando igualmente PUSH, y la segunda llamada lo recupera igualmente con POP (ya que es el mismo código). Así se van acumulando los caracteres en la pila. Al volver, se leen los caracteres en orden inverso, y se libera el espacio en la pila al finalizar las funciones. Algunas veces el compilador también usa el registro EBP para indicar el comienzo de los argumentos para la función, evitando así acceder usando ESP (el puntero de pila). Las instrucciones PUSH y POP modifican ESP automáticamente.
Eso depiende del modo de llamada de una funccion : cdecl/stdcall pasa por la pila, pero fastcall utiliza ecx y edx para los dos primeros parametros. Luego hay differencia en quien tiene la responsabilidad de limpiar la pila. Antes existia tambien __pascal para indicar que se pasaba de hizquierda hacia derecha. Y otro modo register que utilizaba eax. En C++, this puede ser pasado en ECX o en la pila. Todo eso depiende del compilador y del 'calling conventions' de la function. No es nada estandar. ver aqui : x86 calling conventions (http://en.wikipedia.org/wiki/X86_calling_conventions)Cita de: "morfus_bedxhed"En IA32 (comúnmente llamada x86), el paso de argumentos a funciones se realiza a través de la pila. Esto es, se ponen en la pila los argumentos de la función en orden inverso a los declarados en C, usando la instrucción PUSH. En este caso, se pasa el char en la pila a inversa(). La función lo recupera con la instrucción POP.