Essays.club - Ensayos gratis, notas de cursos, notas de libros, tareas, monografías y trabajos de investigación
Buscar

Funciones en C/C++

Enviado por   •  27 de Octubre de 2018  •  1.100 Palabras (5 Páginas)  •  281 Visitas

Página 1 de 5

...

Como verán con los prints del main, los valores de a y b no se vieron intercambiados luego de ejecutar la función swap, esto se debe a que las variables “a” y “b” de la función swap son completamente distintas a las del “a” y “b” del main, estas con copias de sus valores, no apuntan a la misma dirección de memoria. Por lo tando al hacer el cambio de valores, este no se ve reflejado en las variables “a” y “b” del main.

Por referencia significa que se va a pasar a la función la referencia o dirección de memoria donde esta almacenada esas variables, por lo tanto no es una copia del valor de la variable sino la variable en si. Esto produce que cuando realicemos un cambio a esas variables en la función, se vean reflejados en las variables que se pasaron por parámetro, porque son exactamente las mismas.

Ej código:

#include

void swap(int &a, int &b);

void swap(int &a, int &b){ //función que intercambia las variables de a y b, con pasaje de parámetros por referencia.

int tmp;

tmp = a;

a=b;

b=tmp;

}

int main()

{

int a=15;

int b=100;

printf("valor a y b antes de swap: %d %d\n",a,b);

swap(a,b);

printf("valor a y b despues de swap: %d %d",a,b);

return 0;

}

Como podrán ver las variables “a” y “b” del main intercambiaron sus valores después del swap.

Para indicar que vamos a pasar variables por “referencia” usamos el símbolo “&” adelante del nombre de las variables.

Antes de ver pasaje por punteros veremos que son punteros. Los punteros son un tipo de variables que en vez de almacenar los datos, almacenan la dirección de memoria donde están esos datos, por esto se les dicen punteros, porque “apuntan” a la dirección de memoria donde están los datos.

Tiene muchísimas utilidades y ventajas, pero siempre hay q tener en cuenta que un puntero solo puede apuntar a una dirección de memoria del tipo de dato que se le declaro, por ejemplo un puntero de enteros no puede apuntar a un carácter.

Para declararlos:

Tipo *nombre_de_la_variable;

Ejemplo:

int *puntero_a_entero;

float* puntero_a_un_float;

char* puntero_a_un_char;

Ejemplo de código:

#include

main(){

int var = 20; //creo un entero con valor 20

int *puntero; //creo un puntero que apunta a direcciones de memoria de enteros

puntero = &var; //igualo el puntero a la direccion de memoria de var

printf("la direccion de memoria de la variable var es: %x \n",&var);

printf("direccion de memoria almacenada en la variable puntero: %x \n", puntero);

printf("valor almacenado en la direccion de memoria a la que apunta la variable puntero es: %d",*puntero);

}

Como pueden ver en el código cuando hacemos “&var” eso nos devuelve la dirección de memoria donde esta almacenada la variable var, esta dirección es la que almacenamos en los punteros.

Para acceder a los valor a los que apunta el puntero hacemos “*puntero” por lo tanto la variable puntero se puede usar de dos formas:

puntero -------> tiene una dirección de memoria

*puntero ------> esto devuelve el valor que hay en esa dirección de memoria

Funciones con pasaje por punteros, estas funciones reciben variables de tipo puntero, esto quiere decir que reciben direcciones de memoria de variables que hay en el programa, por lo tanto es parecido al pasaje por referencia ya que cualquier cambio que se le haga a los valores a los que apuntan esos punteros, se van a ver reflejados en todo el programa.

Ej código:

#include

void swap(int &a, int &b);

void swap(int *a, int *b){ //función que intercambia las variables de a y b, con punteros.

int tmp;

tmp = *a;

*a=*b;

*b=tmp;

}

main()

{

int a=15;

int b=100;

printf("valor a y b antes de swap: %d %d\n",a,b);

swap(&a,&b); //llamo a la funcion swap y les paso las direcciones de memoria de a y b.

printf("valor a y b despues de swap: %d %d",a,b);

}

...

Descargar como  txt (7.4 Kb)   pdf (50.6 Kb)   docx (16.9 Kb)  
Leer 4 páginas más »
Disponible sólo en Essays.club