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;

}