Un puntero es una variable que "apunta"(refiere) a una posición en la memoria o a una variable que contiene una dirección de memoria. Veamos esto a través de un ejemplo:
#include<stdio.h>
#include<math.h>
int main()
{
float var=M_PI;
float *pf;
printf("Las direcciones de las variables: var:%x y pf:%x\n",&var,&pf);
printf("Sus valores: var = %f y pf = %x\n",var,pf);
pf = &var;
printf("Las direcciones de las variables de nuevo: var %x y pf:%x\n",&var,&pf);
printf("Sus valores: var = %f y pf = %x\n\n",var,pf);
printf("Obtenemos el dato guardado en la dirección a la que apunta pf: %f\n",*pf);
return 0;
}
Para obtener el valor de pi(M_PI) hemos usado la librería matemática que no se enlaza por defecto cuando vamos a compilar. Esto es, para compilar debemos hacer:
gcc punteros.c -o punteros -lm
Aqui podemos diferenciar la dirección en memoria en la que se encuentra el puntero y a la cual apunta, así como la forma en que se obtiene el valor guardado en el puntero y el valor guardado en la ubicación en la memoria a la que apunta el puntero.
También podemos pasar punteros como argumentos a funciones:
#include <stdio.h>
double promediar(int *arr, int tamano);
int main ()
{
int datos[5] = {1000, -2, 0.3, 0.17, -0.5};
float promedio;
promedio = promediar( datos, 5 ) ;
printf("El promedio de los datos es: %f\n", promedio );
return 0;
}
float promediar(int *arr, int tamano)
{
int i, sum = 0;
float prom;
for (i = 0; i < tamano; i++)
{
sum += arr[i];
}
prom = (double)sum / size;
return prom;
}
Veamos que pasa con los argumentos de funciones cuando los pasamos como punteros o como valores.
#include<stdio.h>
void valor(int a)
{
a=10;
printf("En la función valor a = %d\n",a);
}
void referencia(int *a)
{
*a=10;
printf("En la función referencia a = %d\n",a);
}
int main()
{
int numero=0;
valor(numero);
printf("Luego de la función valor numero = %d\n",numero);
referencia(&numero);
printf("Luego de la función referencia numero = %d\n",numero);
}
Ejercicios
- Realice una función que intercambie 2 valores por referencia.
No hay comentarios:
Publicar un comentario