PROGRAMA EN C PARA EL ESTUDIO DE LOS PUNTEROS:
Un puntero en C, es una variable que contiene la dirección de memoria de otra variable, esta otra variable puede ser de cualquier tipo, número, carácter, matriz de números, matriz de caracteres, estructura compuesta de varias variables y más tarde en el C++ un puntero puede guardar la dirección de memoria de una clase de cualquier tipo.
Estas variables punteros ayudaron al lenguaje C, a optimizar los programas y acelerar las ejecuciones de estos, los valores de las variables, no era necesario moverlos por la memoria, sino simplemente se podían hacer las mismas operaciones variando los valores de los punteros. Con esto es obtenían los mismos resultados, pero con mucha menos memoria y más rápido.
Este ejercicio intenta ilustrar el estudio de los punteros creando dos variables del tipo entero a y b, les damos valores, creamos una estructura proveedores a la que introducimos el valor nombre y el precio, creamos punteros a cada una de las variables e intentamos extraer los datos de la dirección y el contenido de las variables, y al final además las operamos con variables y con punteros a las variables para comprobar que obtenemos el mismo resultado.
Creamos una aplicación nueva del tipo Win32 Console Application y le llamamos punteros, en el segundo paso escogemos la opción crear una aplicación simple. E introducimos el siguiente código:
// punteros.cpp :
Defines the entry point for the console application.
//
#include "stdafx.h"
//añadimos la libreria standard de entrada y
salida
#include <stdio.h>
//declaramos
unas variables enteras a y b
int a,b;
//declaramos
unos punteros a unas variables enteras p_a y p_b
int * p_a, * p_b;
//declaramos un
tipo de estructura proveedor con variables nombre y precio
struct proveedor { char nombre[30]; float precio;};
//declaramos un
puntero del tipo proveedor
int main(int argc, char* argv[])
{
struct
proveedor provee;
struct
proveedor * p_proveedor;
//mensaje de titulo del programa
printf("\nPROGRAMA
EJEMPLO DE PUNTEROS \n");
printf("\nSe
crean dos variables y averiguamos el valor y \nla direccion de memoria dondes se encuentran\n");
//el usuario introduce un valor
para las variables a y b
printf("\nIntroduzca
el valor de a=");
scanf("%d",&a);
printf("Introduzca el valor
de b=");
scanf("%d",&b);
while(getchar()!='\n');//funcion que recoje el intro del scanf
printf("---------------------------------------------------------");
//apunto los punteros a las
variables
printf("\nValores
de las variables a y b");
printf("\nEl
valor de a=%d y su direccion
&a=%d",a,&a);
printf("\nEl
valor de b=%d y su direccion
&b=%d",b,&b);
//apuntamos los punteros p_a y p_b a a
y a b
p_a = &a;
p_b = &b;
printf("\n\nValores
de punteros p_a");
printf("\nEl
valor de p_a=%d \nEl valor
de la variable a la que apunta *p_a=%p \nLa direccion &p_a=%d\n",p_a,*p_a,&p_a);
printf("\n\nValores
de punteros p_b");
printf("\nEl
valor de p_b=%d \nEl valor
de la variable a la que apunta *p_b=%p \nLa direccion &p_b=%d\n",p_b,*p_b,&p_b);
printf("---------------------------------------------------------");
//INTRODUCIMOS DATOS A LA ESTRUCTURA
PROVEEDOR
printf("\nValores
de la estructura proveedor");
printf("\nIntroduzca
el valor del nombre=");
gets(provee.nombre);
printf("Introduzca el valor
del precio=");
scanf("%f",&provee.precio);
printf("---------------------------------------------------------");
//valores de la estructura
printf("\nValores
de la estructura provee");
printf("\nEl
valor de provee.nombre=%s y su direccion
&provee.nombre=%d",provee.nombre,&provee.nombre);
printf("\nEl
valor de provee.precio=%f y su direccion
&provee.precio=%d",provee.precio,&provee.precio);
//apunto el puntero de la
estructura a la variable provee
p_proveedor = &provee;
//veo los valores del puntero
printf("\n\nValores
del puntero p_proveedor que apunta a provee");
printf("\nValores
del puntero p_proveedor->nombre");
printf("\nEl
valor de p_proveedor->nombre=%p
\nEl valor de la variable a la que apunta p_proveedor->nombre=%s \nLa direccion
&p_proveedor->nombre=%d\n",p_proveedor->nombre,p_proveedor->nombre,&p_proveedor->nombre);
printf("\nValores
del puntero p_proveedor->precio");
printf("\nEl
valor de p_proveedor->precio=%p
\nEl valor de la variable a la que apunta p_proveedor->precio=%f \nLa direccion &p_proveedor->precio=%d\n",&p_proveedor->precio,p_proveedor->precio,&p_proveedor->precio);
printf("---------------------------------------------------------");
//Opero con las variables
numéricas (a + b) * provee.precio
printf("\nOpero
con las variables numéricas (a+b)*provee.precio");
printf("\nEl
valor de (a+b)*provee.precio=%f",(a+b)*provee.precio);
printf("\nEl
valor de (p_a + p_b) * p_proveedor->precio=%f",(*
p_a+* p_b) * p_proveedor->precio);
//printf("\nEl valor de provee.precio=%f y su direccion
&provee.precio=%d",provee.precio,&provee.precio);
printf("\n\n");
return 0;
}