Diferencia entre revisiones de «Programación en C++/Funciones»

Contenido eliminado Contenido añadido
Línea 121:
</source>
 
== Funciones de tipo puntero (*) == ELVER GALARGA, ELVER GOMEZ TORBA, SEVELINDO PARADO
== Variables estáticas y automáticas ==
En muchas ocasiones se desea que ciertas funciones regresen una referencia o puntero hacia un tipo (sea este estructurado o no) específico de dato en lugar de un valor específico. En tales casos, la función se deberá declarar como para que regrese un puntero. Por ejemplo, supongamos que deseamos crear una función para convertir un número entero en notación decimal a una cadena de caracteres en forma de números binarios, luego, la función mencionada podría escribirse para que reciba el número entero como parámetro y regrese un puntero a una cadena de caracteres conteniendo la conversión. Para ser más puntuales, vamos a escribir un programa en donde se verá la función '''binstr()''', y cuyo objetivo será precisamente convertir números decimales en cadenas binarias.
Dentro de una función, las variables y/o constantes pueden ser declaradas como: '''auto''' (por omisión) o como '''static'''. Si una variable dentro de una función es declarada como estática significa que la misma retendrá su valor entre las llamadas a la función. Por otro lado, la variables automáticas pierden su valor entre las llamadas. En el programa anterior puede verse que el arreglo de caracteres (buffer[65]) se ha declarado como estático para garantizar que dicho buffer retenga los datos aún despues de que la función termine. En el mismo ejemplo, si el buffer no se declara como estático, el contenido del mismo podría ser destruido al salir de la función y los resultados obtenidos podrían ser no deseados.
<div style="background:#FFFFBB; padding:16px; border-color:#0000FF; border-style:solid">
Nota: observe que en la sintaxis para declarar funciones tipo puntero se debe de poner el símbolo '''*''' despues del tipo y antes del nombre de la función que se está declarando. Esto se puede ver en el programa, ya que la función binstr se declara como: '''char *binstr(unsigned int);'''</div>
 
<source lang="cpp">
#include <iostream>
#include <string.h>
 
using namespace std;
 
// declaración de prototipo
char *binstr(unsigned int);
 
// punto de prueba
int main()
{
int n = 128;
cout << "decimal = " << n << ", binario = " << binstr(n) << endl;
cin.get();
}
 
// definición de función binstr()
// nota: esta funcion requiere de la librería estándar string
char *binstr(unsigned int n)
{
static char buffer[65];
int i = 0;
 
strcpy(buffer, "0");
 
if (n > 0) {
while (n > 0) {
buffer[i] = ( n & 1 ) + '0';
i++;
n >>= 1;
}
buffer[i] = '\0';
strrev(buffer);
} // fin (n > 0)
return buffer;
}
</source>
 
== Parámetros constantes ==
Los parámetros usados por una función pueden declararse como constantes ( '''const''' ) al momento de la declaración de la función. Un parámetro que ha sido declarado como constante significa que la función no podrá cambiar el valor del mismo ( sin importar si dicho parámetro se recibe por valor o por referencia ).