Programación C: cómo utilizar punteros en funciones
Un puntero es un tipo de variable. Como tal, puede ser fácilmente arrojó fuera a una función en la programación C. Aún más emocionante, un puntero puede pasear de vuelta de una función como un valor de retorno. A menudo, estos trucos son las únicas formas de obtener información desde o hacia a una función.
Cómo pasar un puntero a una función
La gran ventaja de que pasa un puntero a una función es que la información que está modificada no tiene que ser devuelto. Eso es porque la función hace referencia a una dirección de memoria, no un valor directamente. Mediante el uso de esa dirección, la información puede ser manipulada sin ser devuelto. Apuntando a un descuento demuestra.
SEÑALA EN UN DESCUENTO
#include descuento void (flotan * a) -INT principal) {precio flotador (= 42.99-printf ("El artículo cuesta $%. 2f n", precio) -Descuento (precio) -printf ("Con el descuento, eso es . $% 2f n ", precio) -Retorno (0) -} void descuento (flotar * a) {* a = * a * 0.90-}
En la línea 3 de señalar en un descuento, la función de descuento () es un prototipo. Se requiere un tipo flotante de la variable puntero como único argumento.
Línea 10 pasa la dirección de la precio variable a la función de descuento (). El signo de porcentaje obtiene la posición de memoria del precio variable.
Dentro de la función, la variable puntero la se utiliza para echar un vistazo al valor en la posición de memoria que ha pasado.
Ejercicio 1: Escriba el código fuente de señalar en un descuento en su editor. Construir y ejecutar el programa.
Ejercicio 2: Modificar el código fuente del Ejercicio 1, de modo que una variable puntero del flotador p se declara en la función main (). Inicialice p al precio la ubicación de variable y, a continuación, pasar p a la función de descuento ().
Ejercicio 3: Construir un nuevo proyecto con dos funciones: create () y show (). La función create () recibe un puntero a un array de diez enteros y llena ese array con valores aleatorios en el rango de 0 a 9. La función show () recibe la misma matriz y muestra todos los diez elementos.
Cómo devolver un puntero de una función
Las funciones se conocen por sus tipos, como int o carbón o incluso nula. También puede declarar funciones de puntero, que devuelven una posición de memoria como un valor. Simplemente declarar la función de ser de un tipo de puntero, como
char * monstruo (void)
En este ejemplo, la función monstruo () se declara. No requiere de argumentos pero devuelve un puntero a una matriz de caracteres - un valor de cadena.
Aquí hay otra diferencia con las funciones que devuelven punteros: El valor que se devuelve debe declararse como una variable estática. Tenga en cuenta que las variables son locales de sus funciones. Usted debe conservar los datos de la variable por la que se declara como un tipo estático por lo que su contenido no se descartan cuando la función se detiene. Revertir un String proporciona un ejemplo.
INVERSIÓN DE UNA CADENA
Char #include * strrev (char * entrada) -INT main () {string char [64] -printf ("Escriba texto:") -fgets (String, 62, stdin) -puts (strrev (cadena)) - retorno (0) -} char * strrev (char * entrada) de salida {static char [64] -char * i, * oi = entrada-salida o =-while (* i ++ = ' n'!) - i --- mientras que (i> = entrada) * o ++ = * i --- * o = ' 0'-retorno (salida) -}
Inversión de una cadena puede llegar a ser muy confuso. ¡Presta atención!
Línea 3 prototipos de la función strrev (). Se devuelve un puntero - en este caso, la dirección de una matriz de caracteres o cadena.
La función main () en la línea 5 es bastante fácil de entender. Se reúne por los fgets () función en la línea 10. Se pasó a strrev () en la línea 11 en el interior de las puts () función.
La función strrev () comienza en la línea 16. Se requiere un puntero char como su argumento, lo que se conoce como la entrada en la función. El búfer de salida se crea en la línea 18, y es estática, por lo que no desaparece cuando la función se lleva a cabo. La línea 19 declara dos punteros Char: i y o.
La primera, mientras que bucle en la línea 23 encuentra que el carácter de nueva línea al final de la cadena de entrada. los yo marchas variables a través de la cadena de un carácter a la vez.
Después de encontrar la nueva línea, la yo puntero contiene la dirección del siguiente carácter de entrada, que probablemente no es lo que quieres. Así que la declaración en la Línea 25 hasta la espalda yo para señalar en el último carácter de la cadena antes de la nueva línea.
Al inicio del bucle, mientras que en la línea 27, puntero o sostiene la base de la memoria intermedia de salida, el primer carácter, y el puntero yo ocupa la última. Trate de pensar en esta situación como yo de pie en la parte superior de una escalera y o de pie en la parte inferior.
El bucle while gira hasta que la dirección de puntero yo coincide con la dirección en el inicio de la cadena de entrada. Como yo se disminuye, los caracteres en la dirección yo se copian para abordar o. En sentido figurado, yo marchas por las escaleras, y o marchas hacia arriba.
Línea 29 tapas de la cadena de salida con un carácter NULL. Eso es algo que usted debe recordar al crear cadenas mediante el uso de punteros.
La sentencia return en Línea 31 envía la dirección del búfer de salida, la cadena inversa, de vuelta a la declaración que llama.
Ejercicio 4: Escriba el código fuente de la Inversión de una cadena en su editor. A medida que escribe el código, añadir sus propios comentarios describir lo que está pasando. Siéntase libre de utilizar el texto como guía. Construir y ejecutar el programa.