Overblog Seguir este blog
Edit post Administration Create my blog
13 octubre 2010 3 13 /10 /octubre /2010 02:06

 Diapositiva3

 

 

Punteros.

 

 

Los Punteros o Apuntadores, son variables que contienen la dirección de otra variable.

 

Los usos principales, que tienen, los punteros, son los siguientes:

->Nos ayuda, para que una función devuelva más de un valor. Por ejemplo, una función que devuelva un vector de enteros, en dicha función mandamos la dirección del primer elemento a la función principal, y a partir de ella, imprimimos todos los valores contenidos en el vector.

->Mejor uso de la memoria dinámica. Esto es lo que más nos tiene cuenta, el lector debe tener presente que, el uso de punteros, ayuda a ahorrar memoria y por consiguiente, hace más efectivo el uso y administración de la misma.

 

Declaración de Punteros.

 

La forma de declarar un apuntador, es la siguiente:

int *p;

int->indica que, es un puntero hacia un entero.

*->indica al compilador que esa variable, es un puntero

p-> Es el identificador del puntero.

Otros ejemplos:

float *q; /*apuntador hacia un flotante*/

char *z; /*puntero que contiene la dirección de una variable que guarda un carácter */

Para referirnos a un valor a través de un apuntador, lo hacemos mediante un proceso llamado indireccion.  

Por ejemplo, para mandar a impresión el valor entero, hacia el cual a punta “p”, sería así: printf(“%d”, *p);

 

Los punteros, pueden ser inicializados  a 0, NULL ó alguna dirección válida:

float *p1;

p1=0;

p1=NULL;

 

Ahora bien, para guardar la dirección de alguna variable, en un puntero se tiene &->Operador de Dirección.

 

P1=&a;

 

 Ejemplos

 

 

1.    Diseñe un programa que muestre el uso de operadores básicos en la declaración de punteros empleando el direccionamiento y el operador indireccion.

 

 

#include <stdio.h>

#include <conio.h>

main()

{

   int a;

   /*Declaración de un puntero a un entero */

   int *p;

   clrscr();

   printf("Ingrese un valor ENTERO para la variable:\n");

   scanf("%d", &a);

   while(a<0)

   {

       printf("ERROR, el valor debe ser mayor que cero:\n");

       scanf("%d", &a);

   }

   clrscr();

    /*Limpiamos la pantalla */

   printf("a=%d\n", a); /*Imprimo el valor de a*/

   printf("La dirección de a es %p\n", &a);

   printf("*p=%p\n", p); /*Imprimo la dirección que guarda p*/

   /*imprimo el valor guardado en la dirección a la que apunta p*/

   printf("a=%d\n", *p);

   printf("El tamaño de *p es %d\n", sizeof(p));

   getch();

   return 0;

}

2. Diseñe un programa, que sume dos variables de tipo entero, por medio de apuntadores.

 

 

#include <stdio.h>

#include <conio.h>

main()

{

   int a, b, c;

   int *p1, *p2, *p3; /*declaración de los punteros */

   printf("Ingrese el valor de a:\n");

   scanf("%d", &a);

   printf("Ahora el valor de b:\n");

   scanf("%d", &b);

   c=a+b;

   printf("a+b=%d\n", c);

   /*asignamos las direcciones a los punteros correspondientes/

   p1=&a;

   p2=&b;

   printf("*p1 + *p2=%d\n", *p1+*p2);

   p3=&c;

   printf(" Dirección de a es %p\n Dirección de b es %p\n Y la de c es %p\n\n", p1, p2, p3);

   getch();

   return 0;

}

 

3. Programa que lee un arreglo y una matriz usando  aritmética de punteros */

 

 

#include <stdio.h>

#include <conio.h>

#define M 3

#define N 3

main()

  {

     int x[3][3], y[3];

     int f=0,c=0;

     clrscr();

     for(f=0; f< M; f++)

            {

               for(c=0; c<N; c++)

                  {

                         printf("*(x+ %d)+%d)=", f,c);

                         scanf("%d", *(x+f)+c);

                  }

               printf("Elemento %d del vector:\n", f);

               scanf("%d", &y[f]);

            }

     printf("IMPRESIONES:\n");

     printf("***    MATRIZ   ***\n");

     for(f=0; f<M; f++)

            for(c=0; c<N; c++)

               printf("%d", *(*(x+f)+c));

     printf("\n***   VECTOR   ***\n");

     for(f=0; f<M; f++)

             printf("%d", *(y+f));

     getch();

     return 0;

  }

 

 

Compartir este post

Repost 0
Published by Prof.Luis Eduardo Aponte - en Basica
Comenta este artículo

Comentarios

Angel 06/04/2016 08:24

conio.h no es una biblioteca estandar en C, no debería ser utilizada

Presentación

  • : El blog de Luis Eduardo Aponte
  • : Blog, para facilitar del Lenguaje de Programación C
  • Contacto

Enlaces