De programación c: cómo utilizar punteros en funciones

Un puntero es un tipo de variable. Como tal, puede ser fácilmente se despojó a una función de programación C. Aún más emocionante, un puntero puede desviarse de atrás de una función como 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 ha modificado no tiene que ser devuelto. Esto se debe a 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. Señalando en un descuento demuestra.

Video: Programación en C - APUNTADORES - Parte 1

SEÑALA EN UN DESCUENTO

# include descuento vacío (float * a) -INT principal) {float precio (= 42.99-printf ("El artículo cuesta $%. 2FN", Precio) -Descuento (&precio) -printf ("Con el descuento, es decir $%. 2FN", Precio) -Retorno (0) -} descuento vacío (float * a) {* a = * a * 0.90-}

En la línea 3 de señalar con un descuento, la función de descuento () es un prototipo. Se requiere un tipo de flotador de la variable puntero como único argumento.

La 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 de la precio variable.

Dentro de la función, variable de puntero un 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. Generar y ejecutar el programa.

Ejercicio 2: Modificar el código fuente del Ejercicio 1, de modo que una variable puntero del flotador pag se declara en la función main (). Inicializar pag al precio La ubicación de variable y, a continuación, pasar pag a la función de descuento ().

ejercicio 3: Construir un nuevo proyecto con dos funciones: crear () y show (). La función de crear () recibe un puntero a una matriz de diez números enteros y llena ese matriz con valores aleatorios en el intervalo de 0 a 9. La función de presentación () recibe la misma matriz y muestra todos los diez elementos.

Cómo devolver un puntero a una función

Las funciones se conocen por sus tipos, tales como int o carbón o incluso nula. También se pueden declarar funciones de puntero, que devuelven una posición de memoria como un valor. Basta con declarar la función de ser de un tipo de puntero, como

char * monstruo (void)

En este ejemplo, la función de 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 ser declarado como una variable estática. Tenga en cuenta que las variables son locales de sus funciones. Debe conservar los datos de la variable por la que se declara como un tipo estático para que su contenido no se descartan cuando la función se detiene. Inversión de una cadena proporciona un ejemplo.

INVERSIÓN DE UNA CADENA

Char #include * strrev (char entrada *) -INT () {string principal char [64] -printf ("Escriba algún texto: ") -fgets (cadena, 62, stdin) -puts (strrev (string)) - retorno (0) -} char * strrev (char * de entrada) {salida estática char [64] -char * i, * oi = input- O = salida-tiempo (* i ++ = `n`!) - i --- mientras que (i gt; = entrada) * o ++ = * i --- * o = `` -Retorno (salida) -}

Revirtiendo una cadena puede llegar a ser muy confuso. ¡Presta atención!

Línea 3 prototipos de la función strrev (). Devuelve un puntero - en este caso, la dirección de una matriz de caracteres o una cadena.

La función main () en la Línea 5 es bastante fácil de entender. Se reúne por los fgets () la función, en la línea 10. Se transmite a strrev () en función de la línea 11 en el interior de las puts ().

Video: C++ para principiantes: Funciones y Punteros

La función strrev () comienza en la línea 16. Se requiere un puntero char como su argumento, que se conoce como 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 de char: i y o.

El primer bucle while en la línea 23 no encuentra 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 desea. Por lo 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 que la nueva línea.

Al inicio del bucle, mientras que en la línea 27, puntero o sujeta la base del búfer de salida, el primer carácter, y el puntero yo ejerce en el último. Trate de pensar en esta situación yo de pie en la parte superior de una escalera y o de pie en la parte inferior.

El bucle while hace girar hasta que la dirección de puntero yo coincide con la dirección en el inicio de la cadena de entrada. Como yo se decrementa, los caracteres a la dirección de yo se copian para abordar o. Figuradamente, yo marchas por las escaleras, y o marchas hacia arriba.

Línea 29 tapas de la cadena de salida con un carácter nulo. Eso es algo que debe recordar al crear cadenas utilizando punteros.

Video: Bloque 6.5: Punteros a Estructuras y Funciones con Estructuras

La instrucción de retorno, en la línea 31 envía la dirección del búfer de salida, la cadena invertido, de vuelta a la declaración que llama.

Ejercicio 4: Escriba el código fuente de una cadena de marcha atrás en su editor. A medida que escribe el código, añadir sus propios comentarios describir lo que está pasando. No dude en utilizar el texto como guía. Generar y ejecutar el programa.

Artículos Relacionados